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

6

在使用jquery检测鼠标右键点击时,我注意到click事件处理程序似乎不会在鼠标右键点击时被触发,而mousedown或mouseup事件处理程序却可以。

例如,在测试div上右键单击后,将会弹出“testing!”的警告:

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

然而,以下内容并不具备该功能:
$('#test').click(function(e) {
    alert('testing!');
});

有人知道为什么吗?(涉及IT技术,无法提供更多上下文信息)

1
这里有你需要的答案:https://dev59.com/GHM_5IYBdhLWcg3w1G-N - Stefan H
在Firefox中,$(elem).click(...)无法检测到中间或右键。在Chrome中,中键可以工作,但右键不行...另外,请注意,在使用这个函数之前,必须先 - jbyrd
@Stefan H - 不好意思,我已经阅读了那篇帖子,但是很遗憾,其中没有任何答案能够解决我的问题。 - jbyrd
顺便提一下 - 第二个警告中也有语法错误,应该是alert('testing!');请注意缺少撇号。 - megaSteve4
4个回答

12

当你按下鼠标时,触发的事件中有event.which

来自这里:如何使用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 - Stephen H已经向我推荐了那篇文章,但我说那并没有帮助。我的问题是为什么我需要使用mousedown而不是click(我已经知道这是一个解决方案)。 - jbyrd
@Wes - 但是“点击”是一个mousedown加上mouseup - 即使鼠标在按下和松开之间移动到元素外部并再次移回,只要在其离开时没有mouseup,因此仅捕获mousedown不到一半的工作。有一个现有的jQuery插件用于右键单击:http://abeautifulsite.net/blog/2008/05/jquery-right-click-plugin/ - nnnnnn

8

正如这篇文章所说:

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

因此,在大多数浏览器中,您只能使用mousedownmouseup


3
明白了,感谢这篇文章。换句话说,右键单击不会触发点击事件(只有鼠标按下和松开事件)。 - jbyrd
1
这篇文章并不完全准确,因为Firefox(或许IE也是)会触发绑定在“document”上的右键单击事件。 - Marc-André Lafortune

0

我也尝试了以下代码来捕获特定类别元素的鼠标右键点击

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

这段代码不总是捕捉到鼠标右键点击。


0

不确定您已经测试了哪些浏览器,但根据 MSDN 的说法,onclick 会在“用户单击左键”时触发。也就是说,按定义它不会在右键(或中键)单击时发生。鉴于这是在 MSDN 上的,无论其他浏览器如何,您都可以期望 IE 以这种方式运行。

(Onclick 还会对某些非鼠标操作触发,例如使用键盘更改某些表单元素等)

我知道 jQuery 尝试在浏览器之间规范化行为,但如果浏览器根本不触发事件...

至少有一个我知道的实现右键单击的 jQuery 插件:http://abeautifulsite.net/blog/2008/05/jquery-right-click-plugin/(我没有使用过它,但它看起来很好,除了它指出 Opera 不支持它)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接