【问题标题】:Detecting submit event is raised because of button click由于按钮单击而引发检测提交事件
【发布时间】:2013-02-03 12:20:36
【问题描述】:

是否可以查明是否因为引发了 onclick 事件而引发了 onsubmit 事件? 例如,当单击 <input type="submit" /> 时,会引发 onclick 事件,然后引发 onsubmit 事件。但是,有时会发生表单未提交,即 onsubmit 未引发。

重现步骤(表单是ajax表单,它会自行刷新,在IE10上测试):
1) 通过单击按钮提交表单,
2) ajax 请求完成并更新了表单,
3) 5 毫秒后,再次单击按钮(与步骤 1 中的方式相同),但这次 onclick 被触发,但 onsubmit 没有。如果我单击按钮,例如刷新表单后 500 毫秒,一切都很好

我用
$("form input[type=submit], form input[type=image]").live("click", function (e) { console.log("click"); }
$("form").live("submit", function (e) { console.log("submit"); }
看到没有提出 onsubmit

谢谢

【问题讨论】:

  • 发布一些你到目前为止尝试过的代码
  • “有时会发生表单未提交” - 你的意思是说这看似随机发生并且你不知道为什么?请出示您的代码。
  • 你发布的代码越相关,你得到的答案就越相关。人们猜不出你的问题是什么。
  • 请向我们展示您的设置和您的 javascript。单击提交按钮将提交表单(至少没有验证错误)。
  • 可能是因为你没有返回false,而实际上是提交了表单来触发页面加载。您也不应该使用 .live。 api.jquery.com/live

标签: javascript


【解决方案1】:

不确定你的意思,但我无法在 Firefox 中重现,你也不应该使用 .live:

http://api.jquery.com/live/

从 jQuery 1.7 开始,不推荐使用 .live() 方法。使用 .on() 来 附加事件处理程序。旧版本 jQuery 的用户应该使用 .delegate() 优先于 .live()。

$(document).ready(function(){
    $("#form").delegate(null,"submit", function(){
        console.log("submitting");
        return false;
    });
    $("#submit").click();
    $("#submit").click();
    $("#submit").click();
    $("#submit").click();
});


<form id="form">
    <input type="submit" id="submit"></input>
</form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2013-07-28
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多