点击触摸设备时如何防止“鬼”点击超链接
当我完全触摸标签元素的边框时,它会触发click
事件,但不会触发touchstart
事件。 为什么会这样?
为了表明问题我做了这个小提琴: http : //jsfiddle.net/o8cvqL0L/8/ a
标签有2个事件:
$('#yellow').on('touchstart', function(e) { alert('touch'); e.preventDefault(); }); $('#yellow').on('click', function(e) { alert('click'); });
只需在黄色元素的边框上触摸即可。 有什么方法可以避免这种行为吗?
我在Android浏览器,Safari和桌面Chrome上进行了测试。
非常感谢你!
编辑:触摸必须在元素之外,但仍在触摸的radiusX / Y内,以成为单击。 click
侦听器中的clientX / Y和pageX / Y的值不正确,显示对应于该元素的所有不对的坐标。 ( http://jsfiddle.net/o8cvqL0L/35 )
拥有一个带touchstart
侦听器的容器似乎使得子元素中的这些奇怪行为消失,并且事件对象中的坐标是正确的。 ( http://jsfiddle.net/o8cvqL0L/42/ )然后,使用事件委托修复了问题,但仅当目标元素是div
而不是像我之前的例子中的链接时。 这里是div
元素的解决方案: http : //jsfiddle.net/o8cvqL0L/44/
我仍然在寻找标签的解决方案以及这些问题的记录原因。
touchstart事件实际上是在您提供的代码中触发的。
在这个小提琴http://jsfiddle.net/mssavai/o8cvqL0L/34/我修改了原始代码以显示#yellow
周围的#yellow
。 您会看到触摸边框区域会产生触摸开始。
但是,触摸边缘附近有时会发出咔哒声,我认为这是您面临的问题。 根据我的观察(在Google Chrome – android上),如果触摸在注册区域之外开始,则会发生这种情况,然后当触摸的一部分施加更多压力时,会增长以覆盖该区域的一部分。
尝试一次,我认为这将解决Ur问题。
$('#yellow').on('touchstart mousedown', function(e) { e.preventDefault(); alert('touch'); }); $('#yellow').on('click', function(e) { e.preventDefault(); alert('click'); });