在iOS上处理jQuery Mobile点击事件后,阻止点击事件

Prevent click event after handling jQuery Mobile tap event on iOS

本文关键字:事件 iOS jQuery Mobile 处理      更新时间:2024-02-09

为了提高iPad上web应用程序的响应能力,我从响应点击事件切换到响应jQuery Mobile"点击"事件。它运行良好,响应速度更快,但它引入了一个新的错误。

当用户在iPad上点击屏幕时,iOS会发送TOUCSTART和TOUCHEND事件,jQuery Mobile将其视为"点击"。但300毫秒后,iOS发送了一个"点击"事件。如果我在"点击"发生之前通过前进到下一页来响应"点击",那么下一页就会收到"点击";如果新页面上的按钮恰好出现在点击的位置,那么它就会被点击。

我现在的解决方法是对"点击"做出反应,向用户提供视觉反馈,但等待"点击"后再进入下一页。

我的问题是,是否有可能处理"点击",并以某种方式告诉Safari或iOS根本不要发送"点击"。

您可以判断;

$('elementsSetThatCanBeTapped').on('tap', function(e) {
   e.preventDefault();
   e.stopPropagation();
   $(this).off('click');
})

在点击发生的同一位置注册的点击事件被称为Ghost click。jQuery Mobile在其vmouse事件中提供了部分解决方案。

但要想很好地总结你的选择,你不能错过:http://www.appwards.nl/blog/2013/01/26/javascript-powered-webapps-and-click-versus-tap

您应该能够添加一个return false或e.stopPropagation(),并将相同的函数附加到两个点击中,这样只会触发其中一个事件。

如果您仍然希望能够在没有触摸显示器的计算机上使用web应用程序,您可能需要考虑将单击事件与fastclick库一起使用:https://github.com/ftlabs/fastclick这个库自动消除了300毫秒的延迟。