Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用鼠标中键单击触发onclick事件_Javascript_Jquery - Fatal编程技术网

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对于右键按钮,通常右键单击
请注意,Internet Explorer中不遵循此约定:请参阅 详细信息请参见QuirksMode

按钮的顺序可能不同,具体取决于定点设备的配置方式

也读

查找有两个属性 哪个鼠标按钮被按下了 点击:哪个和按钮。请注意 这些属性并不总是 处理单击事件。安全地 检测您必须使用的鼠标按钮 mousedown或mouseup事件

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")
  }
}