【问题标题】:How to detect if a click() is a mouse click or triggered by some code? [duplicate]如何检测 click() 是鼠标单击还是由某些代码触发? [复制]
【发布时间】:2011-10-03 12:56:43
【问题描述】:

如何检测 click() 是鼠标点击还是由某些代码触发?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    使用事件对象的which 属性。对于代码触发的事件,它应该是undefined

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

    这是上面的working example

    更新基于 cmets

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

    【讨论】:

    • which 可以检测键盘活动,但 OP 只需要鼠标活动
    • 如何通过键盘点击元素?
    • 你从来没有按回车键登录?
    • 你确定吗?据我所知,如果按钮或复选框具有焦点,则“回车”键将导致点击。
    • @James Allardice, click 事件可以由各种不同的设备触发以支持用户可访问性。如果您浏览页面,您可以使用enter 键在链接和表单控件上触发click 事件。遗憾的是,有多少开发人员从未花时间考虑残障用户或可能使用屏幕阅读器浏览互联网的用户。
    【解决方案2】:

    你应该检查 e.originalEvent:

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

    【讨论】:

    • 现场演示: jsfiddle.net/frw8j/3
    • 这似乎区分了 triggerHandler 与否,但是当我刚刚这样做时: $("#someElem")[0].click() 它被视为真正的“点击”。
    【解决方案3】:

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

    目前,无法保证知道。

    【讨论】:

    • 我不同意:e.originalEvent 可以解决问题
    • 不想打破你的粉红色眼镜,但 jQuery 不是魔杖...
    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多