【问题标题】:why browser trigger a click event instead of a submit in a form?为什么浏览器会触发点击事件而不是表单中的提交?
【发布时间】:2012-07-05 21:54:54
【问题描述】:

我有这个代码 http://jsfiddle.net/2Gay9/3/

HTML

<form action="/" method="get" onsubmit="return false";>
    test: <input type="text" value="">
    <input type="submit" value="submit">
</form>

JS

jQuery('input').bind("keydown click", function(event){
    console.log(event.type);
    console.log(jQuery(this));
});

尝试在输入文本中按 RETURN 并查看控制台:

keydown
jQuery(input)
click
jQuery(input submit)

问题:为什么浏览器会在提交按钮上触发“点击”事件,而不是在表单中触发“提交”事件?这是项目缺陷还是规范?如何在不取消表单提交的情况下取消第二个活动?

Tks

更新 换句话说,我只需要将我的事件与浏览器事件区分开来。

【问题讨论】:

标签: javascript browser


【解决方案1】:

使用:

jQuery('input').bind("keydown click", function(event){
    event.preventDefault();
    console.log(event.type);
    console.log(jQuery(this));
});

【讨论】:

  • 我不想停止表单提交,因为我有很多依赖于此的 js。我只想将我的事件与浏览器事件区分开来。
  • 你的意思是自定义事件/事件委托?
  • 没有。我只想知道用户是否点击了提交按钮,或者此点击是否由浏览器触发。
【解决方案2】:

已解决!

如果我无法停止提交按钮上的点击事件,我可以仅将浏览器与用户点击区分开来。为了区分 browsers clickusers click,我将使用 mousedown 事件而不是 click 事件。

每次我们在输入文本中点击 RETURN 时,浏览器都会触发点击当前表单中的第一个提交按钮。但这不会触发 mousedown 事件,在这种情况下是“人类独有的”。

固定版本,打印一次事件。

jQuery('input').bind("keydown mousedown", function(event){
    console.log(event.type);
    console.log(jQuery(this));
});

http://jsfiddle.net/2Gay9/6/

【讨论】:

    猜你喜欢
    • 2013-12-12
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多