当touchstart事件调用preventDefault()时,为什么onclick事件被抑制?

Why onclick event suppressed, when preventDefault() is called for the touchstart event?

本文关键字:事件 onclick 为什么 调用 touchstart preventDefault      更新时间:2023-09-26

我尝试为我的Ipad设备实现一些javascript函数。我想在我的画布div上使用一些滑动动作和点击动作

我实现了水平和垂直滑动功能。当滑动时,我必须在touchstart事件上使用preventDefault来防止整个页面滚动。它工作得很好,但在此之后,我注意到它禁用了这个div上的每个点击事件。当preventDefault被删除时,点击事件再次工作。

有解决这个问题的办法吗?

dojo.connect(this.node, "ontouchstart", this, "touchstart"); 
...   
touchstart: function(e){
    this.touch = dojo.clone(e.changedTouches[0]);
    e.preventDefault();   
}

。node = document.getElementById('aa');

<div id="aa" style="width: 600px; height: 400px;">
  <div onclick="alert('asd');" style="width: 100px; height: 100px; background-color: #ff0000; margin: auto;">
  </div>
</div>

我知道普鲁士已经正确地回答了这个问题,但它缺乏我在答案中寻找的信心。点击事件被touchstart中的preventDefault()所抑制的原因是因为任何连接到touchstart之后的事件都将被抑制。解决方案是将preventDefault()添加到touchmove事件中。

这在Mozilla文档处理点击:

下有更详细的解释

在touchstart或第一次touchmove时调用preventDefault()事件阻止相应的鼠标事件触发,通常在touchmove上调用preventDefault()而不是touchstart。这样,鼠标事件仍然可以触发链接将继续工作。

你可以尝试阻止touchmove事件的默认动作