【发布时间】:2011-10-03 12:56:43
【问题描述】:
如何检测 click() 是鼠标点击还是由某些代码触发?
【问题讨论】:
标签: javascript jquery
如何检测 click() 是鼠标点击还是由某些代码触发?
【问题讨论】:
标签: javascript jquery
使用事件对象的which 属性。对于代码触发的事件,它应该是undefined:
$("#someElem").click(function(e) {
if(e.which) {
//Actually clicked
}
else {
//Triggered by code
}
});
这是上面的working example。
更新基于 cmets
当 input 元素具有焦点时按 Enter 键可以触发 click 事件。如果您想区分代码触发的点击和所有其他点击(鼠标或键盘触发),那么上述方法应该可以正常工作。
【讨论】:
which 可以检测键盘活动,但 OP 只需要鼠标活动
click 事件可以由各种不同的设备触发以支持用户可访问性。如果您浏览页面,您可以使用enter 键在链接和表单控件上触发click 事件。遗憾的是,有多少开发人员从未花时间考虑残障用户或可能使用屏幕阅读器浏览互联网的用户。
你应该检查 e.originalEvent:
$("#someElem").click(function(e) {
if(e.originalEvent === undefined) {
//triggered
}
else {
//clicked by user
}
});
【讨论】:
等待一段时间并使用event.isTrusted - 它受 IE9、Opera 12 和 Firefox Nightly 支持。 Webkit 很可能也会支持它。
目前,无法保证知道。
【讨论】: