当javascript在元素上调用提交时,jQuery覆盖表单提交不起作用

时间:2008-09-26 21:11:52

标签: javascript jquery

我有一个带有正常表单的页面,其中包含一个提交按钮和一些jQuery,它绑定到表单提交事件并用e.preventDefault()覆盖它并运行一个AJAX命令。单击提交按钮时可以正常工作,但单击onclick='document.formName.submit();'的链接时,AJAX表单提交事件处理程序不会捕获该事件。任何想法为什么不能或如何在不绑定所有元素的情况下使其工作?

4 个答案:

答案 0 :(得分:35)

一些建议:

  • 覆盖提交功能以进行恶意出价

    var oldSubmit = form.submit;
    form.submit = function() {
        $(form).trigger("submit");
        oldSubmit.call(form, arguments);
    }
  • 为什么不绑定所有< a>标签?然后你不必做任何猴子修补,它可以像(假设所有链接都在form标签内)一样简单:

    $("form a").click(function() {
        $(this).parents().filter("form").trigger("submit");
    });

答案 1 :(得分:11)

如果您使用的是jQuery,则应该通过它自己的event mechanism附加事件,而不是使用“on”属性(onclick等)。它还有自己的事件触发方法,恰当地命名为“trigger”,您应该使用它来激活表单提交事件。

答案 2 :(得分:1)

谢谢伊兰

我正在使用此事件绑定代码

this._form.bind('submit', Delegate.create(this, function(e) {
    e.preventDefault();
    this._searchFadeOut();
    this.__onFormSubmit.invoke(this, new ZD.Core.GenericEventArgs(this._dateField.attr('value')));
});

但是HTML上有遗留的onclick代码,我不想更改它,因为链接太多了。

答案 3 :(得分:1)

这对我有用:

制作一个虚拟按钮,使用名称提交隐藏真实提交,

然后:

$("#mySubmit").click(function(){
    $("#submit").trigger("click"); });

在您的虚拟对象上设置一个事件处理程序,以触发单击表单提交按钮。让浏览器弄清楚如何提交表单...这样你就不需要在表单提交上preventDefault,这就是麻烦开始的地方。

这似乎解决了这个问题。