我正在使用一个带有哈希链接的 onclick
事件来打开一个 <div>
弹出框。但是, 中键单击不会触发 onclick
事件,而只会获取链接的 href
属性值并在新页面中加载该 URL。如何使用中键单击来打开 <div>
弹出框?
我正在使用一个带有哈希链接的 onclick
事件来打开一个 <div>
弹出框。但是, 中键单击不会触发 onclick
事件,而只会获取链接的 href
属性值并在新页面中加载该 URL。如何使用中键单击来打开 <div>
弹出框?
编辑
这个答案已被弃用,并且在Chrome上无效。你最可能会使用auxclick事件,但请参考下面的其他答案。
/编辑
beggs的答案是正确的,但是它似乎你想防止鼠标中键默认行为。如果是这样,包含以下代码:
$("#foo").on('click', function(e) {
if (e.which == 2) {
e.preventDefault();
alert("middle button");
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a id="foo" href="http://example.com">middle click me</a>
要检测鼠标的中键/滚轮按钮,您需要使用事件auxclick
。例如:
<a href="https://example.com" onauxclick="func()" id="myLink"></a>
然后在你的脚本文件中:
function func(e) {
if (e.button == 1) {
alert("middle button clicked")
}
}
如果您想在不使用HTML属性onauxclick
的情况下从JavaScript进行操作,则需要向元素添加addEventListener
:
let myLink = document.getElementById('myLink')
myLink.addEventListener('auxclick', function(e) {
if (e.button == 1) {
alert("middle button clicked")
}
})
<a id="myLink" href="http://example.com">middle click me</a>
在这里查看与auxclick
事件相关的mdn页面。
if(event.button==1)
条件语句来防止右键截图,这是唯一有效的答案。 - Buddyauxclick
事件,并检查 e.button == 1
的值。我已编辑了答案。 - Flimm您可以使用event.button来识别所点击的鼠标按钮。
返回表示更改状态的按钮的整数值。
请注意,在Internet Explorer中不遵循此约定:详见QuirksMode。
按钮顺序可能因指针设备的配置方式而有所不同。
还请阅读
有两个属性可用于查找已单击的鼠标按钮:which和button。请注意,这些属性并不总是在单击事件上起作用。要安全地检测鼠标按钮,您必须使用mousedown或mouseup事件。
document.getElementById('foo').addEventListener('click', function(e) {
console.log(e.button);
e.preventDefault();
});
<a id="foo" href="http://example.com">middle click me</a>
event.which
,因为它在jQuery源代码的第2756行已经被标准化跨浏览器支持。另外,如果你需要兼容旧版浏览器,可以添加以下代码:if ( !event.which && event.button ) event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
注意不要改变原文意思。 - Russ CamMouseEvent.which
在任何规范中都没有定义,但是MouseEvent.button
在DOM L2事件中有定义。 - Oriolevent.which
,但应该详细说明MouseEvent.which
不是官方规范的一部分。 - Russ Cam这个问题有些老了,但我发现了一个解决方案:
$(window).on('mousedown', function(e) {
if( e.which == 2 ) {
e.preventDefault();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="http://example.com">middle click me</a>
Chrome不会为鼠标滚轮触发“click”事件
在FF和Chrome中有效
e.preventDefault()
,也无法阻止打开链接的默认行为。 - Flimm通常我不喜欢人们提供替代方案而不是解决方案,但既然已经提供了解决方案,我要打破自己的规则。
那些覆盖了中键点击功能的网站让我非常非常烦恼。我通常中键点击是因为我想在新标签页中打开新内容,同时保持当前内容的不受干扰的视图。只要你可以保留中键点击功能并通过所点击元素的HREF属性提供相关内容,我坚信这就是你应该做的。
jQuery在事件上提供了一个.which
属性,可以按从左到右的顺序给出点击按钮的id,分别为1、2、3。在这种情况下,您需要选择2。
用法:
$("#foo").live('click', function(e) {
if( e.which == 2 ) {
alert("middle button");
}
});
$("#foo").live('click', function(e) {
if((!$.browser.msie && e.button == 1) || ($.browser.msie && e.button == 2)) {
alert("middle button");
}
});
也请记住,.button
属性是0索引的,而不是像.which
一样的1索引。
.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");
}
});
click
在像Firefox和Chrome这样的浏览器中无法用于中间鼠标按钮。 - Flimmclick
事件不会触发。比较如下:
这适用于中间点击:
$('a').on('click', function(){
console.log('middle click');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="http://example.com">middle click me</a>
这对于中间点击无效:
$('div').on('click', 'a', function(){
alert('middle click');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<a href="http://example.com">middle click here</a>
</div>
mousedown
或mouseup
。示例如下:
这适用于委派的中间点击:
$('div').on('mouseup', 'a', function(){
console.log('middle click');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<a href="http://example.com">middle click me</a>
</div>
click
不适用于中键点击,就像你第一个例子中的那样。 - Flimm