在尝试用jquery检测鼠标右键时,我注意到click事件处理程序似乎不会随着鼠标右键而触发,而mousedown或mouseup事件处理程序则会。
例如,在testdiv上单击右键后,下面的提示"testing!":
$('#test').mousedown(function(e) {
alert('testing');
});
然而,以下是不是:
$('#test').click(function(e) {
alert('testing!');
});
有人知道为什么吗?
当您按下鼠标时,甚至触发了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并检查大小写
正如本文所说:
在任何浏览器中都没有click事件用于右键单击。
所以你剩下的mousedown
和mouseup
在大多数浏览器
不确定你测试过哪个浏览器,但根据MSDN的onclick触发"当用户点击左鼠标按钮"。也就是说,根据定义,右击(或中击)不会发生这种情况。考虑到这是在MSDN上,你可以期望IE的行为方式,而不管其他浏览器做什么。
(Onclick也会触发某些非鼠标的事情,比如用键盘改变某些表单元素,等等)
我知道jQuery试图规范浏览器之间的行为,但如果浏览器根本不触发事件…
至少有一个jQuery插件,我知道实现右键:http://abeautifulsite.net/blog/2008/05/jquery-right-click-plugin/(我没有使用它,但它看起来不错,除了它注意到Opera不支持它)。
我还尝试了下面的代码来捕捉鼠标右键点击某些元素类
$(".brick").mousedown(function (event) {
if (event.which === 3) {
currentRightClickedTileID = $(this).attr("id");
}
});
此代码并不总是捕捉到右键。