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