【问题标题】:Stopping bubbling event in Firefox在 Firefox 中停止冒泡事件
【发布时间】:2015-12-27 15:15:48
【问题描述】:

我正在尝试处理触摸/鼠标事件。所以,我创建了这段代码:

myObject.addEventListener("touchstart", function(e){
    e.stopPropagation();
    e.preventDefault(); 
    console.log("Touched"); 
    mouseTouchDown(e);
}); 
myObject.addEventListener("mousedown", function(e){
    console.log("Clicked"); 
    mouseTouchDown(e);
}); 
function mouseTouchDown(e){
console.log("Some function.");};

我想停止触摸事件的冒泡,所以点击之后不会被触发。它适用于 Chrome,但在 Firefox 上我进入控制台:

Touched
Clicked

如何在触摸事件后停止鼠标点击触发?

我尝试返回 false,但它不起作用。

【问题讨论】:

  • 虽然这看起来像一个 FF 错误,但您是否在触摸操作实际上应该不同于单击操作的情况下工作?如果它对低于 300 毫秒的时间不敏感,您可以只对点击事件执行该方法,而不是两者都执行

标签: javascript firefox events touch preventdefault


【解决方案1】:

这看起来像是浏览器中的一个错误,您的代码看起来不错。

见:https://bugzilla.mozilla.org/show_bug.cgi?id=977226.
您使用什么操作系统/版本的 Firefox 进行测试?

【讨论】:

【解决方案2】:

您是否将两个事件都附加了相同的元素?

如果是这种情况,错误不是因为冒泡发生。当鼠标单击时会发生几个事件,例如mousedowntouchstart ..etc.so 如果你想避免发生鼠标单击事件添加preventDefault()在鼠标按下。这将禁用该元素上发生的默认鼠标单击事件。

【讨论】:

  • 我需要处理案例:元素
  • @user3629015 你能更具体地谈谈案例吗?
  • 我需要处理的情况: 1.) 将在电脑上用鼠标点击元素。 2.)元素将在任何触摸设备上被触摸。这就是为什么我附加了两个事件,鼠标和触摸。简单的鼠标点击一切正常,但触摸事件也会触发鼠标点击。所以根据这篇文章html5rocks.com/en/mobile/touchandmouse我添加了e.preventDefault();它在 Chrome 中运行良好,但不幸的是在 FF 中不行。让我有点困惑。
  • 它会像魅力一样工作。 myObject.addEventListener("touchstart", function(e){ window.touched = true; e.stopPropagation(); e.preventDefault(); console.log("Touched"); mouseTouchDown(e); }); myObject.addEventListener("mousedown", function(e){ if ( !window.touched ) { console.log("Clicked"); mouseTouchDown(e); } window.touched = false; });
  • 希望这个答案有帮助
猜你喜欢
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 2017-01-17
  • 2012-03-14
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多