【问题标题】:Firefox strange right click event bubbling behaviorFirefox 奇怪的右键单击事件冒泡行为
【发布时间】:2013-05-29 16:44:51
【问题描述】:

我在 Firefox 中遇到了一个奇怪的问题,即右键单击子节点时在文档节点上引发单击事件。

这段代码说明了这个问题:http://jsfiddle.net/RyDZU/5/

更新版本:http://jsfiddle.net/RyDZU/10/

$(document).on("click","span",function(e) {
    console.log('span');
    console.log(e.isPropagationStopped());
});

$(document).on("click","div",function(e) {
    console.log('div');
    console.log(e.isPropagationStopped());
    e.stopPropagation();
    console.log(e.isPropagationStopped());
});

$(document).on("click",function(e) {
    console.log('body');
    console.log(e.isPropagationStopped());
});

HTML:

测试

如果您右键单击单词“test”,则单词“body”会打印在 firefox (21) 的控制台中。不在 IE 10 / Chrome 中。

如何防止在 Firefox 中引发此事件?

这不起作用:

$("body").on("click", "span", function(e) {
    e.preventDefault();
    e.stopPropagation();
});

【问题讨论】:

  • 记录了一个错误:bugzilla.mozilla.org/show_bug.cgi?id=184051。我想您必须检测单击了哪个鼠标按钮,如果在 Firefox 上单击鼠标右键或鼠标中键,则将其取消。
  • @Mr.DucNguyen 哇,这个错误可以追溯到 2002 年?!
  • 是的,它仍然有效 :),它可能会在未来十年内“修复”,但我对此表示怀疑,因为我们已经进入了“触摸”事件时代

标签: javascript jquery firefox


【解决方案1】:

我遇到了同样的问题。我有一个小提琴,如果您在绿色方块中左键单击,则事件由 handler2(在 div 上)和 handler3(在文档上)处理。但是,如果您右键单击,则只会调用 handler3,这意味着没有简单的方法来停止 div 中的右键单击传播。

jsfiddle

// requisite jsfiddle code snippet
function handler2() {
    console.log('in handler2');
}

function handler3() {
    console.log('in handler3');
}

$(document).ready(function () {
    $('#block2').on('click', handler2);
    $(document).on('click', handler3);
});

我也尝试过设置 dom.event.contextmenu.enabled 和 services.sync.prefs.sync.dom.event.contextmenu.enabled,但它们对此行为没有影响。

【讨论】:

    【解决方案2】:

    这可以通过使用event.which 检查哪个鼠标按钮被按下(来自附加到文档的事件侦听器)来修复。见https://stackoverflow.com/a/12430795/1170489

    【讨论】:

      【解决方案3】:

      制作

      $(document).on("click",function(e) {
          console.log('body');
          console.log(e.isPropagationStopped());
      });
      

      脚本中的第一个处理程序。当您按照自己的方式进行操作时,文档点击处理程序会隐藏 span 和 div 处理程序。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-17
      • 2016-06-09
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多