Javascript 为什么在为touchstart事件调用preventDefault()时抑制onclick事件?
我尝试为我的Ipad设备实现一些javascript函数。我想在画布div上使用一些滑动操作和单击操作 我实现了水平和垂直滑动功能。我必须在touchstart事件上使用preventDefault来防止在刷卡时滚动整个页面。它工作得很好,但在此之后,我注意到它禁用了这个div上的每个click事件。当preventDefault被删除时,click事件再次工作 有解决这个问题的办法吗Javascript 为什么在为touchstart事件调用preventDefault()时抑制onclick事件?,javascript,ios,ipad,Javascript,Ios,Ipad,我尝试为我的Ipad设备实现一些javascript函数。我想在画布div上使用一些滑动操作和单击操作 我实现了水平和垂直滑动功能。我必须在touchstart事件上使用preventDefault来防止在刷卡时滚动整个页面。它工作得很好,但在此之后,我注意到它禁用了这个div上的每个click事件。当preventDefault被删除时,click事件再次工作 有解决这个问题的办法吗 dojo.connect(this.node, "ontouchstart", this, "touchsta
dojo.connect(this.node, "ontouchstart", this, "touchstart");
...
touchstart: function(e){
this.touch = dojo.clone(e.changedTouches[0]);
e.preventDefault();
}
this.node=document.getElementById('aa')
您可以尝试阻止touchmove事件的默认操作。我知道Prusse已经正确地回答了这个问题,但它缺乏我在答案中寻找的信心。touchstart中preventDefault()抑制单击事件的原因是,任何已连接的事件以及随后的touchstart都将被抑制解决方案是将preventDefault()添加到touchmove事件中。
这在处理点击下的中有更详细的解释:
在touchstart或第一次touchmove上调用preventDefault()后
事件防止相应的鼠标事件触发,
在touchmove上调用preventDefault()而不是
touchstart。那样的话,鼠标事件仍然可以触发
链接将继续工作
你可以发布你的Javascript和HTML代码吗?我刚刚添加了代码的相关部分。嗯,你也可以发布这个节点是什么吗?添加了一些HTML代码,完整的代码非常复杂,这可能会产生同样的坏结果。目前我正在考虑模拟鼠标点击,此时touchstart和touchend之间的距离非常短。刚刚测试过,这个点击模拟就像一个魅力。
<div id="aa" style="width: 600px; height: 400px;">
<div onclick="alert('asd');" style="width: 100px; height: 100px; background-color: #ff0000; margin: auto;">
</div>
</div>