Firefox中的touchstart处理程序的preventDefault()不起作用 - 纯Javascript

时间:2014-07-26 18:23:16

标签: javascript html firefox web-applications

我想要一个按钮来对触摸'做出反应。在触摸屏上,点击'在非触摸屏上。在触摸屏的情况下,我只希望touchstart处理程序指导我的流程并阻止系统进一步处理click事件。

为此,我向我的按钮添加了两个事件监听器。一个人听了touchstart事件。一旦检测到touchstart,它就会使用event.preventDefault()来取消click事件。

Chrome,Opera和Android浏览器中的触摸屏上的代码实现了预期效果:
- 一个警告说"触摸"。

然而,在Firefox中,尽管touchstart处理程序中有preventDefault(),但仍检测到两个事件:
两个提醒...第一个提示"触摸",然后是第二个警报说"点击"。

lginButton.addEventListener('touchstart', function(event) {
  event.preventDefault();
  alert("touch");
}, false);

lginButton.addEventListener('click', function(event) {
  alert("click");
}, false);

为什么会发生这种情况?如何在所有浏览器中实现预期效果?

1 个答案:

答案 0 :(得分:1)

我目前无法测试。但根据您的反馈,似乎Firefox实际上并未遵循here发现的事件的规范。我正要在Mozilla上找到4-5个关于这个主题的bug日志,最后找到一个解决了这个问题https://bugzilla.mozilla.org/show_bug.cgi?id=977226。绝对检查以确保您拥有当前版本的Firefox。如果你这样做,可能值得为此开一个关于mozilla的新bug。在此期间,您可以在touchstart事件处理程序中设置一个条件,该处理程序检测事件类型并以不同方式处理触摸和鼠标事件。然后在您内部进一步添加更多条件,单击条件来处理浏览器和操作系统版本。这是超级糟糕的做法,但会让你继续前进,直到修补程序实施。