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

我尝试为我的iPad设备实现一些JavaScript函数。 我想使用一些滑动动作,并点击我的canvasdiv的行动。

我实现了水平和垂直滑动function。 我必须使用touchstart事件的preventDefault来防止整页滚动。 它运作良好,但在此之后,我注意到它禁用此div上的每个点击事件。 当preventDefault被移除时,click事件再次起作用。

有没有解决这个问题的方法?

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

this.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> 

您可以尝试阻止touchmove事件的默认操作。

我知道Prusse已经正确地回答了这个问题,但是我缺乏在一个答案中寻找的信心。 touchstart中的preventDefault()所抑制的click事件的原因是因为任何连接的touchstart事件都将被取消。 解决方法是将preventDefault()添加到touchmove事件中。

这在处理点击下的Mozilla文档中有更详细的解释:

由于在touchstart上调用preventDefault()或系列中的第一个touchmove事件可以防止相应的鼠标事件触发,所以在touchmove上调用preventDefault()而不是touchstart是很常见的。 这样,鼠标事件仍然可以触发,像链接这样的事情将继续工作。