使用中键单击触发onclick事件

时间:2009-11-25 09:33:22

标签: javascript jquery

我正在使用散列链接的onclick事件打开<div>作为弹出窗口。但中间点击不会触发onclick事件,但只会获取链接的href属性值,并在新页面中加载网址。如何使用中间点击打开<div>作为弹出窗口?

8 个答案:

答案 0 :(得分:59)

beggs'的回答是正确的,但听起来你想要阻止中间点击的默认动作。在这种情况下,请包含以下内容

$("#foo").on('click', function(e) { 
   if( e.which == 2 ) {
      e.preventDefault();
      alert("middle button"); 
   }
});

preventDefault()将停止活动的默认操作。

答案 1 :(得分:23)

您可以使用

event.button

识别单击了哪个鼠标按钮。

返回一个整数值,表示更改状态的按钮。

  • 0表示标准的“点击”,通常是左键
  • 1表示中间按钮,通常是滚轮点击
  • 2表示右键,通常右键单击

请注意,Internet Explorer中未遵循此约定:请参阅 QuirksMode了解详情。

按钮的顺序可能会有所不同,具体取决于指点设备的配置方式。

同时阅读

Which mouse button has been clicked?

  

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

答案 2 :(得分:9)

当人们提供替代品而不是解决方案时,我通常很讨厌,但由于已经提供了解决方案,我将打破我自己的规则。

重写中间点击功能的网站往往真的,真的让我感到烦恼。我通常会中键点击,因为我想在新标签页中打开新内容,同时可以无障碍地查看当前内容。只要您单独保留中间点击功能并通过点击元素的HREF属性提供相关内容,我就会坚信您应该做什么。

答案 3 :(得分:8)

要检测中键单击/鼠标滚轮按钮,您必须使用事件auxclick。 E.g:

<a href="https://example.com" onauxclick="func()" id="myLink"></a>

然后在您的脚本文件中

func() {
    alert("middle button clicked")
}

如果你想用JavaScript做,那么你addEventListener到元素:

let myLink = document.getElementById('myLink')
myLink.addEventListener('auxclick', function(event) {
    alert("middle button clicked")
})

查看有关auxclick事件here

的mdn页面

答案 4 :(得分:6)

jQuery在事件上提供了.which属性,它将点击按钮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索引,如.which

答案 5 :(得分:6)

正确的方法是使用.on,因为.live已被弃用,然后从删除

$("#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"); 
   }
});

original answer

答案 6 :(得分:6)

这个问题有点陈旧,但我找到了解决方案:

$(window).on('mousedown', function(e) { 
   if( e.which == 2 ) {
      e.preventDefault();
   }
});

Chrome不开火&#34;点击&#34;鼠标滚轮的事件

在FF和Chrome中工作

答案 7 :(得分:3)

我知道我参加派对已经迟到了,但对于那些仍然处理中间点击问题的人来说,请检查你是否委派了这个事件。如果是委派,click事件不会触发。比较:

适用于中间点击:

$('a').on('click', function(){
    console.log('middle click');
});

这对中间点击不起作用:

$('div').on('click', 'a', function(){
    console.log('middle click');
});

如果您仍然需要跟踪中间点击使用事件委派,那么相应jQuery ticket中所述的唯一方法是使用mousedown或{{1相反。像这样:

适用于委派的中间点击:

mouseup

See it online here