首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在jQuery中,我如何区分程序性单击和用户单击?

在jQuery中,我如何区分程序性单击和用户单击?
EN

Stack Overflow用户
提问于 2011-07-13 14:00:18
回答 7查看 21.2K关注 0票数 92

假设我定义了一个click处理程序:

代码语言:javascript
复制
$("#foo").click(function(e){

});

如何在函数处理程序中判断事件是以编程方式激发的,还是由用户激发的?

EN

回答 7

Stack Overflow用户

发布于 2011-07-13 14:16:51

您可以查看事件对象e。如果事件是由真正的单击触发的,那么在e中会有类似clientXclientYpageXpageY等的内容,它们将是数字;这些数字与触发单击时的鼠标位置有关,但即使单击是通过键盘启动的,它们也可能会出现。如果事件是由$x.click()触发的,那么在e中就不会有通常的位置值。你也可以看看originalEvent property,如果事件来自$x.click(),它就不应该出现在那里。

可能是这样的:

代码语言:javascript
复制
$("#foo").click(function(e){
    if(e.hasOwnProperty('originalEvent'))
        // Probably a real click.
    else
        // Probably a fake click.
});

这是一个可以使用的小沙箱:http://jsfiddle.net/UtzND/

票数 120
EN

Stack Overflow用户

发布于 2011-07-13 14:07:34

您可以使用jQuery trigger manual中所述的额外参数

代码语言:javascript
复制
$("#foo").click(function(e, from){
    if (from == null)
        from = 'User';
    // rest of your code
});

$('#foo').trigger('click', ['Trigger']);
票数 45
EN

Stack Overflow用户

发布于 2014-06-13 21:19:33

还有另一个问题已经得到了回答。

How to detect if a click() is a mouse click or triggered by some code?

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

代码语言:javascript
复制
$("#someElem").click(function(e) {
    if (e.which) {
        // Actually clicked
    } else {
        // Triggered by code
    }
});

JsFiddle示例- http://jsfiddle.net/interdream/frw8j/

希望它能帮上忙!

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6674669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档