jQuery click事件与Firefox中的live函数表现不同

在使用Firefox *时,使用带有实时function的事件单击会导致奇怪的行为。 在Firefox中,只需右键单击即可触发点击! 在Google Chrome中,Internet Explorer 7中也不会发生同样的情况。

例:

  • 没有实时 ,请转到演示并尝试右键单击段落。 应出现一个对话框菜单。
  • 使用直播 ,进入演示并尝试右击“Click me!”。 现在出现对话框菜单和“另一段”。

*使用firefox 3.5.3测试

据我所知,这是一个已知的问题(bug?)。 您可以通过测试单击按钮来轻松解决此问题,如下所示:

$('a.foo').live("click", function(e) { if (e.button == 0) { // 0 = left, 1 = middle, 2 = right //left button was clicked } else { //other button was clicked (do nothing?) //return false or e.preventDefault() } }); 

您可能更喜欢使用switch具体取决于您的具体要求,但如果点击左按钮以外的任何按钮,通常您可能只想做什么(或简单地返回),如上所述:

  $('a.foo').live("click", function(e) { switch(e.button) { case 0 : alert('Left button was clicked');break; default: return false; } }); 

我认为这是一个已知的“错误”,您可以在附加单击处理程序(附加到文档)之后查询事件对象,并查看它是否右键单击,否则在操作DOM后手动附加单击处理程序。

查找之后,e.button是您要查询的属性:

 .live('click', function(e){ if ( e.button == 2 ) return false; // exit if right clicking // normal action }); 

在这里查看我的答案 :如果你不介意稍微更改jQuery源代码,在liveHandler()添加一行就可以完全解决问题。