无法绑定表单提交事件

时间:2014-11-04 19:09:30

标签: jquery

我正在使用IE9。 jQuery.fn.jquery说1.8.2

代码I用于绑定表单提交:

$("#formName")[0].submit(function foo () {
    alert( "Handler for .submit() called." );       
});

每次执行此代码而不是绑定时,我的formName表单都会提交。如何绑定而不是提交?

2 个答案:

答案 0 :(得分:4)

使用preventDefault可以解决问题(如@Jason P所述)

$("#formName").on("submit", function(event)
{
    console.log("Handler for .submit() called.");
    event.preventDefault(); // Prevent the event from processing the submit request.
    console.log("Default submit event prevented from occurring.");
});

注意:

  • 使用.on()可确保您的侦听器会注意到DOM树中的更改。
  • 使用事件侦听器时不需要命名您的函数。
  • [0]不是必需的(如@Robert Rozas所述),只需知道id就足够了。
  • 将事件作为参数传递给函数允许您使用它,即本例中的event.preventDefault部分。
  • 建议使用console.log()进行临时日志记录,使用您真棒的开发人员工具:)

答案 1 :(得分:3)

@ Jonast92的优秀答案可以帮助您绑定处理程序到您的表单的submit事件。我只是想到指出一个案例,你可能真的需要你的代码中的[0]

我们假设您已阻止表单提交,并且您已确定数据足够好并且是时候提交表单了。您可以使用 ajax 默认表单提交来提交表单:

//ajax form submission
$.ajax( this.action,
        {data: $(this).serialize(), ...
        ........
});

//or default form submission
this.submit();
//or $(this)[0].submit();
//or $("#formName")[0].submit();

要记住的要点

  • $('.form').submit() 触发.form的{​​{1}}事件。这将导致绑定到此事件的任何处理程序触发。除非其中一位处理程序有submit.form,否则这也会导致return false格式提交。

  • event.preventDefault() $('.form').on('submit', handler) 将处理程序$('.form').submit( handler )绑定到handler' s提交活动。

  • .form 导致表单通过默认表单提交提交。请注意,这不会触发$('.form')[0].submit()的提交事件,因此无法通过.formreturn false阻止。