0

所以在使用的时候

$("#myElement").click(function(){
    //do something
});

jQuery API注释:

点击事件仅在这一系列事件之后触发:

  • 当指针位于元素内部时,按下鼠标按钮。
  • 当指针位于元素内部时,鼠标按钮被释放。

这适用于鼠标左键和右键单击。

现在我想只用一个特定的鼠标按钮来模拟这个(不管是哪一个,这只是模拟的概念click())。我知道你可以使用:

$("#myElement").mousedown(function(event){
    if(event.button == 0) //leftclick
    else if (event.button == 1) //middleclick
    else if (event.button == 2) //rightclick
}

这一切都很好,但请注意,这与click(). 再次来自jQuery API

如果用户点击一个元素,拖离它,然后释放按钮,这仍然算作 mousedown 事件。在大多数用户界面中,这一系列动作被视为“取消”按钮按下,因此通常最好使用 click 事件,除非我们知道 mousedown 事件对于特定情况更可取。

类似的mouseup()。因此,使用两者之一显然并且绝对不是预期的结果。那么我们怎样才能达到预期的效果呢?

4

1 回答 1

1

根据您的解释,您已经在问题本身中回答了您的问题。您不能.trigger()将单击模拟(或用 jQuery 术语)作为单个按钮。但是你可以执行e.which你正在做的检测mousedownclick它会做你想要的。

$("#myElement").click(function(e){
    switch(e.which){
        case 1:
            // do left click stuffs
            break;
        case 2:
            // do middle click stuffs
            break;
        case 3:
            // do right click stuffs
            break;
    }
});

或者,如果您只想在单击特定按钮时执行操作,否则不执行任何操作:

$("#myElement").click(function(e){
    if(e.which === 1){
        // do your stuffs
    }
});

然后,如果您想使用不同的事件来模拟它,只需将操作设为函数:

function leftClick($el,e){
    if(e.which === 1){
        // do your magic with $el
    }
}

然后你可以用任何你想要的调用它

$("#myElement").click(function(e){
    leftClick($(this),e);
});

$('.SomethingElse').on('click',function(e){
    leftClick($('#myElement'),e);
});

回答显而易见的“为什么不在e.which传递给函数之前测试?答案是......个人编码选择。我这样做的方式不那么冗长,如果你调用它 30,000 次它会更快......但是对于每个他们自己的,无论哪种方式都可以。

于 2013-10-31T16:58:09.347 回答