如何检测click()是否是鼠标单击或由某些代码触发?

cla*_*rkk 19 javascript jquery

如何检测click()是否是鼠标单击或由某些代码触发?

Jam*_*ice 24

使用which事件对象的属性.应该是undefined针对代码触发的事件:

$("#someElem").click(function(e) {
    if(e.which) {
        //Actually clicked
    }
    else {
        //Triggered by code
    }
});
Run Code Online (Sandbox Code Playgroud)

这是上面的一个工作示例.

根据评论更新

input元素具有焦点时按Enter键可以触发click事件.如果您想区分代码触发的点击和所有其他点击(鼠标或键盘触发),那么上述方法应该可以正常工作.

  • 如何通过键盘单击元素? (3认同)
  • “which”可以检测键盘活动,但 OP 只需要鼠标活动 (2认同)
  • 你确定吗?如果按钮或复选框具有焦点,就我所知,"输入"键将导致单击. (2认同)

Nic*_*tti 13

你应该检查e.originalEvent:

$("#someElem").click(function(e) {
    if(e.originalEvent === undefined) {
        //triggered 
    }
    else {
        //clicked by user
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 这似乎区分了triggerHandler和not,但是当我刚刚这样做时: $("#someElem")[0].click() 它被视为真正的“点击”。 (2认同)

c69*_*c69 5

等待一段时间即可使用event.isTrusted- IE9、Opera 12 和 Firefox Nightly 支持。Webkit 很可能也会支持它。

目前,没有保证可以知道的方法。

  • 我不同意: e.originalEvent 可以解决问题 (2认同)