我正在使用onclick
哈希链接的事件来打开<div>
弹出窗口。但是,单击中键不会触发onclick
事件,而只会获取href
链接的属性值,并将URL加载到新页面中。如何使用中键打开<div>
弹出窗口?
我正在使用onclick
哈希链接的事件来打开<div>
弹出窗口。但是,单击中键不会触发onclick
事件,而只会获取href
链接的属性值,并将URL加载到新页面中。如何使用中键打开<div>
弹出窗口?
Answers:
编辑
该答案已被弃用,不适用于Chrome。您很可能最终会使用auxlink事件,但请参考以下其他答案。
/编辑
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>
preventDefault()将停止事件的默认操作。
.live
已被弃用并删除,以支持.on
2
?
为了检测到单击中键/鼠标滚轮,您必须使用event auxclick
。例如:
<a href="https://example.com" onauxclick="func()" id="myLink"></a>
然后在您的脚本文件中
function func(e) {
if (e.button == 1) {
alert("middle button clicked")
}
}
如果要从JavaScript(不使用HTML属性onauxclick
)进行操作,请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>
结帐有关的MDN页面auxclick
事件在这里。
if(event.button==1)
子句,这是唯一有效的答案。
auxclick
事件和检查的值e.button == 1
。我编辑了答案。
您可以使用
以确定单击了哪个鼠标按钮。
返回一个整数值,指示更改状态的按钮。
请注意,Internet Explorer中未遵循此约定:有关详细信息,请参见QuirksMode。
根据指示设备的配置方式,按钮的顺序可能会有所不同。
也看了
有两个属性可以找出单击了哪个鼠标按钮:哪个和按钮。请注意,这些属性并不总是在单击事件上起作用。为了安全地检测到鼠标按钮,您必须使用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 ) ));
MouseEvent.which
未在任何规范MouseEvent.button
中定义,但在DOM L2事件中定义。
event.which
但应该对此进行详细说明,但这MouseEvent.which
并不是官方规范的一部分。
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
。
这个问题有点老了,但是我找到了一个解决方案:
$(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无法触发鼠标滚轮的“点击”事件
在FF和Chrome中工作
e.preventDefault()
被调用,它也不会阻止在新选项卡中打开链接的默认行为。
正确的方法是使用.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等浏览器中的鼠标中键。
我知道我参加晚会很晚,但是对于那些仍然在处理中间点击时仍然遇到问题的人,请检查是否委托该活动。在授权的情况下,该click
事件不会触发。比较:
这适用于中间点击:
$('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>
如果您仍然需要使用事件委托来跟踪中间点击,那么相应jQuery票证中所述的唯一方法就是使用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
不适用于第一个示例中的中间点击。