使用中点击触发onclick事件
我正在使用哈希链接的onclick
事件来打开<div>
作为popup窗口。 但是,中间点击不会触发onclick
事件 ,只会将链接的href
属性值加载到新页面中。 我怎样才能用中键打开<div>
作为popup窗口?
请求'的答案是正确的,但它听起来像要防止中间点击的默认行为。 在这种情况下,请包括以下内容
$("#foo").on('click', function(e) { if( e.which == 2 ) { e.preventDefault(); alert("middle button"); } });
preventDefault()将停止事件的默认操作。
您可以使用
event.button
以确定哪个鼠标button被点击。
返回一个整数值,指示更改状态的button。
- 0为标准“点击”,通常是左键
- 1为中间button,通常是车轮点击
- 2为正确的button,通常是右键单击
请注意,Internet Explorer中不遵循此约定:有关详细信息,请参阅QuirksMode。
button的顺序可能会根据指针设备的configuration方式而有所不同。
还读
哪个鼠标button被点击了?
有两个属性可以找出哪个鼠标button被点击:哪个button。 请注意,这些属性并不总是在点击事件上工作。 要安全地检测鼠标button,您必须使用mousedown或mouseup事件。
正确的方法是使用.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"); } });
原来的答案
jQuery在事件上提供了一个.which
属性,使得点击buttonid从左到右为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-indexed,就像.which
。
我知道我迟到了,但是对于那些在处理中间点击方面仍然有问题的人来说,请检查一下是否委托了这个活动。 在委派的情况下, click
事件不会触发。 比较:
这适用于中间点击:
$('a').on('click', function(){ console.log('middle click'); });
这不适用于中间点击:
$('div').on('click', 'a', function(){ console.log('middle click'); });
如果您仍然需要使用事件代理来跟踪中间点击,那么唯一的方法就是使用mousedown
或mouseup
。 像这样:
这适用于委派的中间点击:
$('div').on('mouseup', 'a', function(){ console.log('middle click'); });
在这里看到它 。
这个问题有点老,但我find了一个解决scheme:
$(window).on('mousedown', function(e) { if( e.which == 2 ) { e.preventDefault(); } });
Chrome不会触发鼠标滚轮的“单击”事件
在FF和Chrome中工作
我通常讨厌人们提供替代scheme而不是解决scheme,但是由于解决scheme已经提供,我将打破我自己的规则。
中间点击function被覆盖的网站往往真的,真的让我烦恼。 我通常是中间点击,因为我想在新标签中打开新内容,同时对当前内容进行无阻碍的查看。 任何时候你都可以离开中间点击的function,并通过单击元素的HREF属性使相关的内容可用,我坚信你应该这样做。