Javascript 使用鼠标中键单击触发onclick事件
我正在使用散列链接的Javascript 使用鼠标中键单击触发onclick事件,javascript,jquery,Javascript,Jquery,我正在使用散列链接的onclick事件打开一个作为弹出窗口的。但是,中键单击不会触发onclick事件,而是只获取链接的href属性值,并将URL加载到新页面中。如何使用鼠标中键单击打开弹出的 您可以使用 以确定单击了哪个鼠标按钮 返回一个整数值,指示更改状态的按钮 0表示标准的“单击”,通常为左键 1对于中间按钮,通常是滚轮单击 2对于右键按钮,通常右键单击 请注意,Internet Explorer中不遵循此约定:请参阅 详细信息请参见QuirksMode 按钮的顺序可能不同,具体取决
onclick
事件打开一个作为弹出窗口的
。但是,中键单击不会触发onclick
事件,而是只获取链接的href
属性值,并将URL加载到新页面中。如何使用鼠标中键单击打开弹出的
您可以使用
以确定单击了哪个鼠标按钮
返回一个整数值,指示更改状态的按钮
- 0表示标准的“单击”,通常为左键
- 1对于中间按钮,通常是滚轮单击
- 2对于右键按钮,通常右键单击
document.getElementById('foo').addEventListener('click',函数(e){
控制台日志(e按钮);
e、 预防默认值();
});代码>
jQuery在事件中提供了一个。该属性将单击按钮id从左到右设置为1、2、3。在这种情况下,您需要2
用法:
$("#foo").live('click', function(e) {
if( e.which == 2 ) {
alert("middle button");
}
});
Adamantium的答案也会起作用,但正如他指出的那样,你需要注意IE:
$("#foo").live('click', function(e) {
if((!$.browser.msie && e.button == 1) || ($.browser.msie && e.button == 2)) {
alert("middle button");
}
});
还要记住,.button
属性是0索引的,而不是像那样的1索引的。它
编辑
这个答案已被弃用,在Chrome上不起作用。您很可能最终会使用,但请参考下面的其他答案
/EDIT
beggs的答案是正确的,但听起来你想阻止鼠标中键的默认动作。在这种情况下,请包括以下内容
$(“#foo”)。在('click',函数(e)上{
如果(e.which==2){
e、 预防默认值();
警报(“中间按钮”);
}
});代码>
正确的方法是使用.on
,因为.live
已被弃用,然后从jQuery中删除:
$("#foo").on('click', function(e) {
if( e.which == 2 ) {
e.preventDefault();
alert("middle button");
}
});
或者,如果您想要“实时”的感觉,并且文档开始时页面上没有#foo
:
$(document).on('click', '#foo', function(e) {
if( e.which == 2 ) {
e.preventDefault();
alert("middle button");
}
});
我知道我参加聚会要迟到了,但对于那些在处理鼠标中键时仍有问题的人,请检查是否委派活动。如果是委派,则不会触发单击
事件。比较:
这适用于中间点击:
$('a')。在('click',function()上{
log('middle click');
});代码>
这个问题有点老了,但我找到了一个解决方案:
$(窗口).on('mousedown',函数(e){
如果(e.which==2){
e、 预防默认值();
}
});代码>
我通常讨厌人们提供替代方案而不是解决方案,但既然已经提供了解决方案,我就要打破我自己的规则
覆盖鼠标中键点击功能的网站往往会让我非常非常不舒服。我通常会点击鼠标中键,因为我想在新选项卡中打开新内容,同时不受阻碍地查看当前内容。任何时候,只要您可以不使用鼠标中键功能,通过单击元素的HREF属性提供相关内容,我坚信这就是您应该做的。要检测鼠标中键/鼠标滚轮按钮,您必须使用事件auxclick
。例如:
<a href="https://example.com" onauxclick="func()" id="myLink"></a>
如果您想从JavaScript执行此操作(不使用HTML属性onauxclick
),那么您可以向元素添加EventListener
:
让myLink=document.getElementById('myLink'))
myLink.addEventListener('auxclick',函数(e){
如果(e.按钮==1){
警报(“单击鼠标中键”)
}
})
我建议使用event.which
,因为它已经在jQuery源代码第2756行的浏览器中标准化了if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0))
@RussCam但是,MouseEvent.which
在任何规范中都没有定义,但在DOM L2事件中定义了MouseEvent.button
。@Oriol是正确的,但在不同的浏览器供应商中实现不同。OP用jQuery标记了这个问题,所以这就是为什么我建议使用event.which
,但应该详细说明MouseEvent.which
不是官方规范的一部分。@rahul,有7个以上按钮的游戏鼠标呢?实际上,这在Firefox或Chrome等浏览器中不起作用,只适用于主点击。请参阅,和。我可以覆盖mozilla浏览器的功能吗!!例如,在左键单击它会打开一个弹出窗口。。。。但对于中键单击,它不会打开弹出窗口,并且会打开一个新选项卡,其中弹出窗口不会打开。。所以我想覆盖mozilla的中键点击功能……mozilla有一个设置,可以在一个新选项卡而不是一个新窗口中打开所有弹出窗口。如果用户启用了此选项,那么我认为您无法做任何事情。如果不是这样,您可以发布一些代码或问题页面的链接吗?这在Firefox和Chrome等浏览器中不起作用。请记住,.live
被弃用并删除,取而代之的是。on
For me FF仅适用于mousedown事件。点击事件调用这个东西,2
是否有任何跨浏览器常量?这在Chrome 55中不再有效。看到了吗,当问题是鼠标中键没有触发单击事件时,这是一个怎样的解决方案?我仍然不明白当鼠标中键没有触发onclic事件时,问题是如何解决的
function func(e) {
if (e.button == 1) {
alert("middle button clicked")
}
}