无法使用jquery的click事件处理程序来检测右键单击

时间:2011-09-08 04:30:08

标签: javascript jquery event-handling right-click

在尝试使用jquery检测到鼠标右键时,我注意到点击事件处理程序似乎没有通过鼠标右键单击触发,而mousedown或mouseup事件处理程序则执行此操作。

例如,在右键单击测试div后,以下警告“测试!”:

$('#test').mousedown(function(e) {
    alert('testing');
});

但是,以下

$('#test').click(function(e) {
    alert('testing!');
});

有谁知道为什么?

4 个答案:

答案 0 :(得分:12)

当你mousedown时,偶数被解雇了event.which

从这里采取:How to distinguish between left and right mouse click with jQuery

$('#element').mousedown(function(event) {
    switch (event.which) {
        case 1:
            alert('Left mouse button pressed');
            break;
        case 2:
            alert('Middle mouse button pressed');
            break;
        case 3:
            alert('Right mouse button pressed');
            break;
        default:
            alert('You have a strange mouse');
    }
});

因此,不要使用.click(),而是使用mousedown并检查案例。

答案 1 :(得分:8)

正如article所说:

  

任何浏览器中的右键单击都没有点击事件。

因此,大多数浏览器都会留下mousedownmouseup

答案 2 :(得分:0)

不确定您使用哪种浏览器,但根据MSDN onclick会在用户点击鼠标按钮时触发“。即,根据定义,右击(或中间)点击不会出现这种情况。鉴于MSDN上的情况,无论其他浏览器做什么,您都可以期待IE以这种方式运行。

(Onclick还可以触发某些非鼠标内容,例如使用键盘更改某些表单元素等)。

我知道jQuery会尝试规范浏览器之间的行为,但是如果浏览器根本没有触发事件......

我知道至少有一个jQuery插件实现了右键单击:http://abeautifulsite.net/blog/2008/05/jquery-right-click-plugin/(我没有使用它,但它看起来不错,只是它注意到Opera不支持它)。

答案 3 :(得分:0)

我还尝试使用以下代码来捕获某些元素类的鼠标右键

$(".brick").mousedown(function (event) {
            if (event.which === 3) {
                currentRightClickedTileID = $(this).attr("id");
            }
        });

此代码并不总能捕获右键。