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

时间:2009-09-27 16:41:21

标签: ajax firefox jquery

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

示例:

  • Without live,转到演示并尝试右键单击 这些段落。对话框菜单应该 出现。
  • With live,转到演示并尝试正确 点击“点击我!”。现在两个对话框 菜单和“另一段”出现。

*使用firefox 3.5.3测试

3 个答案:

答案 0 :(得分:4)

据我所知,这是一个已知问题(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,具体取决于您的具体要求,但如果点击左按钮以外的任何按钮,通常您可能只想做什么(或简单地返回),如上所述:< / p>

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

答案 1 :(得分:1)

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

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

.live('click', function(e){

if ( e.button == 2 ) return false; // exit if right clicking

// normal action

});

答案 2 :(得分:1)

请参阅my answer here:如果您不介意稍微更改jQuery源代码,请在liveHandler()中添加一行完全解决问题。