Отправка (submit) HTML-форм при нажатии клавиши Enter
Общепринятой считается практика привязки js-валидации форм к событию form.onsubmit. Но
я лишь недавно (и неожиданно для себя) нашел этому убедительное обоснование. Всё дело в странной
обработке различными браузерами нажатия Enter в формах. Этой теме и посвящена данная статья.
Исследования проведены в текущих версиях основных браузеров (IE, FF, Opera, Chrome и Safari).
Условия отправки форм по нажатию Enter
В Chrome и Safari, в любой форме с произвольным набором полей, нажатие клавиши Enter приводит к
событию form.onsubmit. В IE, FF, Opera для отправки HTML-формы по нажатию Enter необходимо
выполнение хотя бы одного из двух Условий:
Наличие Условия 2 и особого поведения Chrome и Safari означает, что не стоит привязывать js-валидацию
к нажатию на обычную кнопку (событию button.onclick), так как она может быть пропущена из-за нажатия Enter
даже если в форме нет инпутов с type="submit" и "image".
Цепочки js-событий, происходящие после нажатия Enter
Рассмотрим, какие события (помимо обычных onkey***) и в каком порядке происходят при нажатии клавиши Enter
в зависимости от
Ситуация 1: выполнено Условие 2, но не выполнено Условие 1
(для Chrome и Safari: не выполнено Условие 1).
Ситуация 2: выполнено Условие 1, но не выполнено Условие 2
(для Chrome и Safari: выполнено Условие 1).
Под элементом firstsubmit имеется ввиду первый в форме инпут типа submit или image (порядок, как ни странно, определяется положением в коде, а не значением атрибута tabindex). Под this - текущий инпут.
Ситуация 3: Выполнены одновременно Условия 1 и 2 (для Chrome и Safari
эта ситуация аналогична Ситуации 2, поэтому не рассматривается).
Наличие особого поведения IE7 означает, что не нужно привязывать js-валидацию к нажатию на инпут с type="submit"
(событие submit.onclick), так как она может быть пропущена из-за нажатия Enter
даже если в форме всего один инпут с type="submit" и "image".
Вадим Назаров, июнь 2009
|


