FastClick使用之trigger触发click失效

最近为了提升web app在ios上的点击效率,使用了FastClick.js,效果很明显,基本是点击后立马有反馈。可是发现一个问题,在使用模拟点击的时候,并不能触发点击的目的。

$("#btn").trigger("click");//模拟点击

而以上代码,在安卓上,却能正常触发。

于是百度查找了相关的资料,找到以下内容(引用自http://amazeui.org/1.x/javascript/fastclick/

不应用 FastClick 的场景

  • 桌面浏览器;
  • 如果 viewport meta 标签 中设置了 width=device-width, Android 上的 Chrome 32+ 会禁用 300ms 延时;

Copy

<meta name="viewport" content="width=device-width, initial-scale=1">
  • viewport meta 标签如果设置了 user-scalable=no,Android 上的 Chrome(所有版本)都会禁用 300ms 延迟。
  • IE10 中,可以使用 css 属性 -ms-touch-action: none 禁止元素双击缩放(参考文章)。

根据上面描述,终于知道在安卓之所以能生效,是因为属于FastClick不应用的场景,而IOS则应用上了FastClick的效果。于是跟踪代码,各种调试,发现了在ios上,需要调用“模拟两次触发”才能完成一次真正的点击事件;

于是写了如下扩展:

var notNeed = FastClick.notNeeded(document.body);
$.fn.triggerFastClick=function(){
    this.trigger("click");
        if(!notNeed){
        this.trigger("click");
    }
}

需要用到模拟点击事件的时候,就使用$("#btn").triggerFastClick()来代替原来的trigger("click");

目前暂时用这种方法处理了在FastClick环境下模拟触发点击失效的问题,不知是否有其他解决方法?

时间: 2025-01-01 23:05:18

FastClick使用之trigger触发click失效的相关文章

jquery的自定义事件通过on绑定trigger触发

jquery绑定自定义事件,可以实现预先绑定好一个处理方法,当需要使用的时候利用jquery trigger来触发自定义事件,以达到方便快捷的目的.我们来假设一个这样的场景,一个textarea中的字数计算,如果是直接键盘输入或者粘贴进来的话,是可以使用input方法检测到,但是如果是通过js插入的文本,这个时候input事件就监测不到了,这个时候如果我们事先给绑定一个myChange事件,它的回调函数就是来处理计算其中的文本字数的,我们在使用js给这个textarea赋值以后,连缀写上.tri

JS 插件 fastclick.js 解决手机端click点击延迟

fastclick.js 什么用 加快手机的反映速度,测试是可以用的,很快... fastclick的js FastClick 是一个简单,易于使用的JS库用于消除在移动浏览器上触发click事件与一个物理Tap(敲击)之间的300延迟.它支持以下浏览器:Mobile Safari on iOS 3 and upwardsChrome on iOS 5 and upwardsChrome on Android (ICS)Opera Mobile 11.5 and upwardsAndroid B

ios下Safari无法触发click事件的处理

ios下的Safari真是傲娇啊,坑好多. 首先上代码 <!DOCTYPE html> <html> <head> <title>122</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no"&

JavaScript 触发click事件 兼容FireFox,IE 和 Chrome

解决了火狐下无法触发click事件的问题 <script language="javascript"> function test2(name) { if(document.all) { document.getElementById(name).click(); } else { var evt = document.createEvent("MouseEvents"); evt.initEvent("click", true, t

Selenium2+python自动化46-js解决click失效问题

前言 有时候元素明明已经找到了,运行也没报错,点击后页面没任何反应.这种问题遇到了,是比较头疼的,因为没任何报错,只是click事件失效了. 本篇用2种方法解决这种诡异的点击事件失效问题 一.遇到的问题 1.在练习百度的搜索设置按钮时,点保存设置按钮,alert弹出没弹出(代码没报错,只是获取alert失败),相信不只是我一个人遇到过. 二.点击父元素 1.遇到这种问题,应该是前面操作select后导致的后遗症(因为我注释掉select那段是可以点击成功的) 2.第一种解决办法,先点击它的父元素

老生常谈:ie6下,a标签href设置javascript:void(0);后绑定的click失效

老生常谈:ie6下,a标签href设置javascript:void(0);后绑定的click事件,如果有form表单提交或跳转等事件,会失效!举例: <a id="id_back" href="javascript:void(0);" title="返回管理">返 回</a> $("#id_back").click(function(){         $("#id_frm").

Selenium2+python自动化46-js解决click失效问题【转载】

前言 有时候元素明明已经找到了,运行也没报错,点击后页面没任何反应.这种问题遇到了,是比较头疼的,因为没任何报错,只是click事件失效了. 本篇用2种方法解决这种诡异的点击事件失效问题 一.遇到的问题 1.在练习百度的搜索设置按钮时,点保存设置按钮,alert弹出没弹出(代码没报错,只是获取alert失败),相信不只是我一个人遇到过. 二.点击父元素 1.遇到这种问题,应该是前面操作select后导致的后遗症(因为我注释掉select那段是可以点击成功的) 2.第一种解决办法,先点击它的父元素

移动端click失效

移动端使用touch事件,但是会影响到a标签的使用,click事件在touch后执行 先判断节点是否是a标签,之后阻止touch事件冒泡. document.addEventListener('touchend',function (e) { if (e.target.tagName == 'A' || e.target.tagName === 'button'){ e.stopPropagation(); }else{ if(!$("#qt").hasClass("hide

Iphone上对于动态生成的html元素绑定点击事件$(document).click()失效解决办法

在Iphone上,新生成的DOM元素不支持$(document).click的绑定方法,该怎么办呢? 百度了N久都没找到解决办法,在快要走投无路之时,试了试Google,我去,还真找到了,歪国人就是牛逼,原帖地址:http://stackoverflow.com/questions/3705937/document-click-not-working-correctly-on-iphone-jquery 大概意思是,如果要用$(document).click()来绑定新生成的DOM元素,必须给此