jQuery:使用特定鼠标BUTTON模拟onClick

时间:2013-10-31 14:13:35

标签: jquery

所以当使用

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

jQuery API笔记:

  

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

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

这适用于 BOTH 左右鼠标按钮。

现在我想用一个特定的鼠标按钮来模拟这个(无论哪一个,它只是模拟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()。因此,使用其中之一显然并非绝对不是理想的结果。那么我们怎样才能达到预期的效果呢?

1 个答案:

答案 0 :(得分:1)

根据您的解释,您已在问题中回答了您的问题。您无法模拟(或以jQuery术语,.trigger())单击作为单个按钮。但是,您可以对e.which上的mousedown执行click检测,它会完全按照您的意愿执行。

$("#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次,它会要快一点......但是对于每一个人来说,无论哪种方式都可行。