Вызов метода submit() формы не равносилен нажатию кнопки отправки. При вызове этого метода будет выполнено только третье из вышеперечисленных трех действий - отправка данных на сервер. То, что он не должен порождать вызов обработчикаonClick кнопки отправки, вполне понятно - ведь мы пытаемся отправить данные в обход кнопки отправки (которой, кстати, может и не быть вовсе). Но и обработчик события onSubmit у формы тоже не вызывается - это является для многих неожиданным. Не будем судить, насколько это логично (и почему это поведение отличается от поведения метода reset(), см. ниже), а просто проиллюстрируем этот эффект, введя в предыдущий пример ссылку, вызывающую метод submit():
Пример 5.8. Метод submit() не вызывает обработчика onSubmit (html, txt)
Тем самым данные могут уйти на сервер без предварительной проверки JavaScript-скриптом. Каким же образом заставить браузер вызвать обработчик onSubmit? Для этого существует возможность обратиться к этому обработчику напрямую:document.f.onsubmit(). Остается предусмотреть, что после этого метод submit()должен вызываться не всегда, а только если onSubmit либо не возвратил никакого значения, либо возвратил true, иными словами, если он не возвратил false. Окончательно мы получаем:
Пример 5.9. Принудительный вызов onSubmit перед submit() (html, txt)
Есть еще один способ инициировать отправку данных формы в обход кнопки отправки (которой, кстати, у формы может и не быть). Если фокус находится на любом текстовом поле <INPUT TYPE=text> формы и пользователь нажмет клавишу Enter, то (в большинстве браузеров) произойдет вызов обработчика события onSubmit формы и отправка данных на сервер.
Введите текст и нажмите Enter:<BR><FORM ACTION="receive.htm" onSubmit="return confirm('Вы хотите отправить данные?')"><INPUT TYPE=text VALUE="Текст вводить здесь:" SIZE=50></FORM>
Пример 5.10. Отправка данных формы нажатием клавиши Enter (html, txt)
Этот способ работает логичнее, чем метод submit(), т.к. отправляемые на сервер данные не избегают предварительной проверки обработчиком onSubmit.
Кнопка сброса ( reset ) позволяет вернуть все поля формы в первоначальное состояние, которое они имели при загрузке страницы. Нажатие кнопки сброса приводит к следующей последовательности действий браузера:
вызов обработчика события onClick у данной кнопки;
вызов обработчика события onReset у формы;
восстановление значений по умолчанию во всех полях формы.
Вызов метода click() у кнопки сброса равносилен нажатию этой кнопки, т.е. приводит к тем же трем действиям:
<FORM NAME=f onReset="return confirm('Вы хотите очистить форму?')"><INPUT TYPE=text VALUE="Измените этот текст"><INPUT TYPE=reset VALUE="Кнопка сброса" NAME=s onClick="alert('Вызван обработчик onClick у кнопки сброса')"></FORM><A HREF="javascript: document.f.s.click();void(0);" >Вызвать метод <B>click()</B> кнопки сброса</A>
Пример 5.11. Вызов метода click() у кнопки сброса (html, txt)
Есть способы сбросить форму в исходное состояние в обход кнопки сброса (которой, кстати, у формы может и не быть). Во-первых, это вызов метода reset()у формы. Во-вторых, если фокус находится на любом поле или кнопке формы, то можно нажать клавишу Esc. Пример:
Измените текст, а затем нажмите Esc (либо ссылку).<BR><FORM NAME=f onReset="return confirm('Вы хотите очистить форму?')"><INPUT TYPE=text VALUE="Измените этот текст"></FORM><A HREF="javascript: document.f.reset();void(0);" >Вызвать метод <B>reset()</B> формы</A>
Пример 5.12. Сброс формы нажатием клавиши Esc (html, txt)
Как можно видеть, оба способа не просто сбрасывают форму, но и вызывают обработчик события onReset формы. Таким образом, метод reset() ведет себя более логично и предсказуемо, нежели submit().