2

Я заметил довольно странное поведение в IE.HTML-форма с одним текстовым полем + предотвращение обратной передачи в Internet Explorer

У меня есть форма HTML с помощью одного текстового поля ввода и кнопку отправить

На Submit нажмите Мне нужно выполнить на стороне клиента JavaScript функцию, которая делает необходимым.

Теперь, когда я хочу, чтобы предотвратить обратную передачу в текстовом поле (на клавишу ввода нажмите)

Я добавил ключ пресс функцию JavaScript, которая выглядит следующим образом:


<input type=text onkeypress="return OnEnterKeyPress(event)" /> 

function OnEnterKeyPress(event) { 
      var keyNum = 0; 
      if (window.event) // IE 
      { 
       keyNum = event.keyCode; 
      } 
      else if (event.which) // Netscape/Firefox/Opera 
      { 
       keyNum = event.which; 
      } 
      else return true; 
      if (keyNum == 13) // Enter Key pressed, then start search, else do nothing. 
      { 
       OnButtonClick(); 
       return false; 
      } 
      else 
       return true; 
     } 

Strangly это не работает.


Но если я передать текстовое поле функции:

<input type=text onkeypress="return OnEnterKeyPress(this,event);" /> 

function OnEnterKeyPress(thisForm,event) { 
      var keyNum = 0; 
      if (window.event) // IE 
      { 
       keyNum = event.keyCode; 
      } 
      else if (event.which) // Netscape/Firefox/Opera 
      { 
       keyNum = event.which; 
      } 
      else return true; 
      if (keyNum == 13) // Enter Key pressed, then start search, else do nothing. 
      { 
       OnButtonClick(); 
       return false; 
      } 
      else 
       return true; 
     } 

Я могу предотвратить постбэк.

Может ли кто-нибудь подтвердить, что именно происходит здесь?

форма HTML имеет только один текстовое поле и кнопке отправки

результирующие о/р функции JavaScript, выполняемую на Представлять отображаются в текстовой области HTML в отдельных делах.

+0

lemme попробуйте и переформулируйте вопрос в заявлении. Есть ли у IE проблемы с формой с одним типом ввода = «текст» и кнопкой отправки. – SudheerKovalam

ответ

8

Обнаружена работа по этой проблеме.

Я только что узнал, что в IE, если в форме есть только одно текстовое поле и одна кнопка отправки, нажав enter, введите форму submit. Однако, если есть несколько текстовых полей, IE не выполняет автоматическую отправку формы при вводе, а вместо этого запускает событие onclick.

Итак, я вводил скрытое текстовое поле в форме, и все работает магически. Мне даже не нужно обрабатывать событие onkeypress для текстового поля.

<Form> 
    <input type="text" /> 
    <input type="text" style="display:none"/> 
    <input type="submit" onClick="callPageMethod();return false;"/> 
</Form> 

Это прекрасно работает для меня !!

Это не проблема в FF, так как нажатие enter напрямую приводит к событию onclick для вызова кнопки отправки.

0

Возврат false в onsubmit, который используется для отправки формы через javascript.

+0

Я donot хочу представить форму. Infact Я хочу предотвратить отправку формы, поскольку я обрабатываю ответ запроса, давая вызовы AJAX pagemethods. – SudheerKovalam

0

Должно быть какое-то взаимодействие с другим кодом, который вы не разместили. Ваш код останавливает отправку формы для меня в обоих вариантах, и нет причин, по которым это не должно быть.

Но улавливание ввода нажатий клавиш трудно сделать правильно и, скорее всего, будет раздражать как можно больше. Существует почти всегда лучший способ.

Например, как утверждает altCognito, «return.forummit» возвращает false, поэтому форма никогда не отправляется в ответ на взаимодействие пользователя. Кроме того, если вы поместите код AJAX (предположим, что это именно то, что вы делаете) в обработчике onsubmit вместо onclick на кнопке, вы также можете сделать так, чтобы нажатие клавиши Enter имело тот же эффект, что и нажатие кнопки отправки, пользователь может нормально ожидать.

Если вы этого не хотите, по-видимому, нет причин включать элемент формы <. Это совершенно справедливо, если бы только элементы ввода, сидящие самостоятельно, если вы никогда не ожидаете, что браузер отправит их в любом месте.

+0

Также я прочитал, что в IE, если в форме есть только одно текстовое поле и одна кнопка отправки, нажав enter, введите форму submit. Однако, если есть несколько текстовых полей, IE не делает автоматическую отправку формы при вводе, то вместо этого он запускает событие onclick кнопки. – SudheerKovalam

+0

Такое поведение относится только к IE. – SudheerKovalam

0

Только что пришли сюда из-за соответствующего наблюдения, по меньшей мере, IE 7 и 8:

Если есть только один ввод текста и одна кнопка отправки на форме и пользователь нажимает клавишу возврата ключа, IE не будет включать в себя имя/значение кнопки отправки в запросе. Insead, там будет только значение ввода текста.

Если я добавлю еще один ввод текста, будут отправлены как текстовые входы, так и параметры кнопки отправки. Второй ввод текста можно даже скрыть: <input type="text" style="display:none"/>

Так что это не, связанный с событиями, а скорее простой отправкой.

Это происходит с GET и POST. Добавление элемента выбора в форму не изменяет поведение. -- очень странно.

1

Привет, вы также можете отключить поведение по умолчанию.

jQuery('#yourInput').keydown(function (e) { 
    if (e.keyCode == 13) { 
    e.preventDefault(); 
    } 
}); 

Cheers!

+0

Не работает! –

+0

Несколько раз в зависимости от того, как настроены события ваших элементов, вам может потребоваться остановить все пузырьки. Пожалуйста, взгляните на эту статью на quicksmode, который может помочь вам лучше http://www.quirksmode.org/js/events_order.html –

Смежные вопросы