14

查看我的 jsfiddle演示,如果e.which == 1然后当您左键单击 h2 时它会 e.which == 2e.which == 3它不会工作。2是鼠标中键,3是鼠标右键。我也发现了这个:

jQuery 提供了一个 e.which 属性,分别返回 1、2、3 表示左键、中键和右键。所以你也可以使用 if (e.which == 3) { alert("right click"); }

此代码不起作用:

代码:

    $("h2").live('click', function(e) { 
   if( e.which == 2 ) {
      e.preventDefault();
      alert("middle button"); 
   }
});
4

3 回答 3

24

您可能想要捕获 mousedown 事件,并且您还需要防止 oncontextmenu 事件在右键单击事件期间阻止上下文菜单出现。

$("h2").live('mousedown', function(e) { 
   if( (e.which == 1) ) {
     alert("left button");
   }if( (e.which == 3) ) {
     alert("right button");
   }else if( (e.which == 2) ) {
      alert("middle button"); 
   }
   e.preventDefault();
}).live('contextmenu', function(e){
   e.preventDefault();
});

更新: .live()自jQuery 1.9以来已被弃用。使用.on()代替。

$("h2").on('mousedown', function(e) { 
  if (e.which == 1) {
    alert("left button");
  } else if (e.which == 3) {
    alert("right button");
  } else if (e.which == 2) {
    alert("middle button");
  }
  e.preventDefault();
});
于 2010-10-24T09:10:29.413 回答
2

过去我注意到除了常规的左键单击之外的任何事情都使用单击事件的一些奇怪之处。我不记得细节了,但如果你把“click”改成“mousedown”或“mouseup”,你应该会有更好的结果。

于 2010-10-24T08:38:12.773 回答
1

现在button已经被弄得面目全非。根据 W3C,它的值应该是:

  • 左键 - 0
  • 中间按钮 - 1
  • 右键 - 2

根据微软的说法,它的价值观应该是:

  • 左键 – 1
  • 中间按钮 - 4
  • 右键 - 2

毫无疑问,微软的模式比 W3C 的要好。0 应该意味着“没有按下按钮”,其他的都是不合逻辑的。

来自http://www.quirksmode.org/js/events_properties.html

于 2011-07-17T09:15:36.863 回答