如何禁用鼠标滚轮点击按钮?

7
我想找到一种方法来禁用鼠标滚轮按钮的默认操作,即在新标签页中打开链接。这是否可能?

2
又有人不尊重标准的鼠标事件 -.-' http://www.howtogeek.com/howto/internet/prevent-annoying-websites-from-messing-with-the-right-click-menu-in-firefox/ 和 http://www.pcworld.com/article/185288/bring_your_middle_mouse_button_to_life.html - Ron van der Heijden
4个回答

9

绑定一个通用的点击事件处理程序,专门检查中键单击。在该事件处理程序内,调用e.preventDefault()

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

请注意,并非所有浏览器都支持防止默认操作。对于我来说,它只在Chrome中起作用。Firefox,Opera和IE9都不会在中键单击时触发点击事件。他们会引发鼠标按下和抬起事件。

7
在Chrome中无法工作,http://jsbin.com/arulub/edit#javascript,html,在Firefox中也不行。请注意,你的代码有误,“click”事件甚至不适用于中间/鼠标滚轮按钮。 - Esailija
1
@Esailija:在我的Chrome浏览器上可以工作。但在Firefox浏览器上确实不行。 - J.P.
@J.P.tenBerge 是什么操作系统?在Windows 7中,"click"不会被触发用于中键或右键单击,不需要理会,这只是右键单击。 - Esailija
@Esailija:我这里也用的是Windows 7,在Chrome中也能触发中键单击。另外,我注意到在其他浏览器中也会触发mouseup和mousedown事件。 - J.P.
@Esailija:规范(http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings-mouseevents)建议 click 事件应该接收按钮上下文信息,包括中间按钮。虽然由于不同的浏览器实现,我没有使用这个属性,但规范确实建议 click 事件处理程序应该能够与中间按钮一起工作。 - J.P.
显示剩余3条评论

5

这对我很有效...

$(document).on("mousedown", "selector", function (ev) {
    if (ev.which == 2) {
        ev.preventDefault();
        alert("middle button");
        return false;
    }
});

抱歉添加了一条没有对话题有所贡献的评论。但那真是太棒了。 - Ahmad Alfy

4

我的代码:

$(document).on('auxclick', 'a', function(e) {
if (e.which === 2) { //middle Click
    e.preventDefault();
    e.stopPropagation();
    e.stopImmediatePropagation();
    return false;
}
return true;

3

使用JavaScript禁用鼠标滚轮事件:

在IE浏览器中:

document.attachEvent('onmousewheel', function(e){
     if (!e) var e = window.event;
     e.returnValue = false;
     e.cancelBubble = true;
     return false;
}, false);

Safari中:
document.addEventListener('mousewheel', function(e){
    e.stopPropagation();
    e.preventDefault();
    e.cancelBubble = false;
    return false;
}, false);

Opera 中:
document.attachEvent('mousewheel', function(e){
    if (!e) var e = window.event;
    e.returnValue = false;
    e.cancelBubble = true;
    return false;
}, false);

Firefox 中:
document.addEventListener('DOMMouseScroll', function(e){
    e.stopPropagation();
    e.preventDefault();
    e.cancelBubble = false;
    return false;
}, false);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接