html-форма разница между click (), submit () и ручным щелчком в jquery
У меня есть страница jsp следующим образом:
<script type="text/javascript" src="/mywebapp/js/jquery.js"></script>
<script type="text/javascript">
$( function() {
$('#testform').submit(function(){
alert('now starting submit');
return true;
});
$("#test1btn").click(function(){
$('#testform #submit').click();
});
$("#test2btn").click(function(){
$('#testform').submit();
});
});
</script>
<form id="testform" method="post" action="backend/search_test.do">
<input id="reqpagenr" name="reqpagenr" size="10">
<input type="button" id="test1btn" value="TestClick"/>
<input type="button" id="test2btn" value="TestSubmit"/>
<input id="submit" type="submit" value="Go">
</form>
когда я вручную нажимаю (т. е. с помощью мыши) кнопку "Go", форма отправляется после отображения текста "now starting submit"; когда нажмите кнопку "TestClick", форма успешно отправлена, но текст "now starting submit" не появляется; когда нажмите кнопку "TestSubmit", появляется текст "now starting submit", но форма не отправлена вообще.
вопреки моим ожиданиям, кнопки "TestClick" и "TestSubmit" не работают так, как кнопка "Go", когда оба нажаты. В моем понимании, три нажатия кнопки должны делать то же самое, то есть отправлять форму после появления текста "теперь начинаем отправлять". Поэтому мой вопрос в том, почему результаты трех щелчков кнопок отличаются?
Я использую jquery 1.3.2
4 ответов
вторая кнопка не отправляет форму из-за ошибки в jQuery (или DOM), которая вызывает submit
метод для сбоя, если идентификатор кнопки отправки "отправить". Смотри:http://bugs.jquery.com/ticket/1414
похоже, что обработчик событий отправки jQuery игнорируется при ручной настройке формы отправки через $('#testform').submit ();
Это должно работать в обработчик щелчка:
$('#testform').trigger("submit")
обновление:
на самом деле как richardml сказал, что первая проблема у вас есть ошибка jQuery, поэтому первое, что нужно переименовать
id
of the submit to something else.вторая проблема
type
на test1btninput
что нужноtype="submit"
для того, чтобы вести себя как обычная кнопка "Отправить".
фокус в том, чтобы изменить тип при наведении мыши, так что код будет выглядеть так:
$(function() {
$('#testform').submit(function() {
alert('now starting submit');
});
//TestClick
$('#test1btn').hover(function() {
$(this)[0].setAttribute('type', 'submit');
},function() {
$(this)[0].setAttribute('type', 'button');
});
//TestSubmit
$('#test2btn').click(function() {
$('#testform').submit();
});
});
остальное работает, как ожидалось.
надеюсь, что это поможет
вы должны использовать событие onsubmit для запуска функции вместо этого.
<form id="testform" method="post" onsubmit="foo()" action="backend/search_test.do">
это вызовет foo() всякий раз, когда вы отправляете форму с помощью кнопки отправки или метода submit ().