如何在iOS设备上用touchstart替换click
目的
单击时关闭锚标记的父div。 在下面的代码中,我想在用户单击锚标记close_performance_tt时隐藏div performance_tt 。
问题
花了几个小时后,无法让它在iOS设备上运行。 在其他一切工作正常,甚至是BlackBerry 10设备。
Website performance has become an important consideration for most sites. The speed of a website affects usage and user satisfaction, as well as search engine rankings, a factor that directly correlates to revenue and retention. As a result, creating a system that is optimized for fast responses and low latency is key. Close var userAgent = navigator.userAgent.toLowerCase(); var isiOS = (navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false); if (isiOS) { $("#close_performance_tt").bind('touchstart', function() { alert('Touch-start event triggered'); }); } else { $("#close_performance_tt").bind('click', function() { alert('Click event triggered'); }); }
定义稍后可以使用的clickhandler:
var clickHandler = ('ontouchstart' in document.documentElement ? "touchstart" : "click"); $("a").bind(clickHandler, function(e) { alert("clicked or tapped. This button used: " + clickHandler); });
这将触发点击非触摸设备和触摸设备上的触摸启动。
说到这里,我强烈建议使用快速点击 ,并使用常规点击事件。 使用上述解决方案,当您在其上滑动以滚动页面时,您将在链接上触发“touchstart” – 这是不理想的。
在iOs中a
标签是可点击元素,因此触摸链接将触发鼠标事件(包括click
)。
这段代码
$("#close_performance_tt").bind('click',function() { alert('Click event triggered'); });
将在iOs上运作良好。
有关更多信息,请访问: http : //developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html
请参阅http://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
对于iOS鼠标事件,例如click不要bubbe,除非:
- 事件的目标元素是链接或表单字段。
- 目标元素或其任何祖先(包括但不包括)具有为任何鼠标事件设置的显式事件处理程序。 此事件处理程序可能是一个空函数。
- 目标元素或其任何祖先(包括文档)都有一个游标:指针CSS声明。
对我来说最简单的解决方案是将cursor: pointer
应用到任何地方,以防它是iOS触控设备。 由于没有光标,它没有任何视觉影响