使用过iscroll插件的同学都知道iscroll支持自定义事件,即在调用iscroll时参数赋值options.click = true。

接下来定义事件如:

 $clinicAppoint.on('click', function(event) {
if($(event.target).closest('#clinic-select').size() > 0 ) {
alert($(event.target).closest('#clinic-select')[0].id);
}else if($(event.target).closest('#appoint-time').size() >0) {
alert($(event.target).closest('#appoint-time')[0].id);
}
});

安卓和pc端模拟显示正常,在IOS上会点击id="clinic-select"的元素及其子元素时,alert正常,接着点击id="appoint-time"的元素及其子元素时,诡异的现象出现了:

居然alert出"clinic-select",接着第二次点击id="appoint-time"的元素及其子元素时,alert又正常了。再点击id="clinic-select"的元素及其子元素时,alert又不正常了。去掉 alert,一切又正常了,看来这是alert的问题。

IOS最终问题的根源:

在没有alert的情况的下,每次点击事件的顺序都是那么的和谐:touchstart->touchend; touchstart->touchend。

如果有alert,就影响了这个和谐的事件,事件是这样的:

第一次点击:touchstart->touchend->touchstart

第二次点击:touchend->touchstart->touchcancel

第三次点击:touchstart->touchend->touchstart

第四次点击:touchend->touchstart->touchcancel

这不和谐不要紧,要命是第一次点击最后的touchstart和第二次点击touchend事件是一个整体,被alert强制破坏了,

导致第二次点击事件总是第一次绑定的事件。直到第三次点击回到正常,第四次点击又郁闷了。。。。。解决办法:

纠正alert引起的事件顺序错乱,让它们回到正常顺序,即:

第一次点击:touchstart->touchend

第二次点击:touchstart->touchend

。。。。。

 setTimeout(function(){
alert($(event.target).closest('#appoint-time')[0].id);
},0);

在alert之前先让浏览器UI进程按照顺序执行alert。就可以让事件回到正常顺序,即:

第一次点击:touchstart->touchend

第二次点击:touchstart->touchend

。。。。。

血的教训:不要用alert。

IOS下自定义click事件使用alert引发的血案的更多相关文章

  1. ios下按钮click事件点击穿透问题

    和app进行混合开发的时候,一个页面使用h5写的,按钮上绑定click事件会触发下面图片上的a链接导致跳转,页面如图 顶部是一个banner,分vr.视频.图片三部分,红框处的三个nav按钮绑定cli ...

  2. IOS下的 click 点击失效

    当委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. demo: & ...

  3. ios微信浏览器click事件不起作用的解决方法

    $(document).on( "click", ".weui_cell", function (event) {alert(); }); JS代码是这样的,h ...

  4. jquery 自定义click事件执行多次

    用jquery绑定一个按钮click事件后,第一次点击后一切正常,第二次点击竟然执行两次,以后越来越多, 后来查看文档发现 jquery click 不是替换原有的function 而是接着添加,所以 ...

  5. Android Touch事件传递机制引发的血案

    尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38942135 关于Android Touch事件传递机制我之前也写过两篇文章,自觉得对Tou ...

  6. 关于移动端的Click事件

    在移动端执行Click事件,通常情况出现有300毫秒的延迟,为防止这种不必要的延迟效果,我们可以换种方式来实现,同样达到快速执行Click事件的效果. 先了解一下移动端Click的执行顺序: touc ...

  7. safari浏览器click事件要点击两次才有响应出现闪烁

    闪烁问题 由于在iOS Safari上click事件存在300ms响应延时,所以为touch事件添加样式,会和click事件默认样式叠加而产生闪烁问题. 因为ios safari浏览器中对触摸事件的响 ...

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

    ios下的Safari真是傲娇啊,坑好多. 首先上代码 <!DOCTYPE html> <html> <head> <title>122</tit ...

  9. 关于IOS下click事件委托失效的解决方案

    一.由于某些特殊情况下,需要用到事件委托,比如给动态创建的DOM绑定click事件,这里就需要事件委托(这里就牵扯到:目标元素和代理元素)目标元素:动态创建的元素,最终click事件需要绑定到该元素 ...

随机推荐

  1. leetcode(一)Word Pattern

    题目描述: Given a pattern and a string str, find if str follows the same pattern. Here follow means a fu ...

  2. 谈谈MVC项目中的缓存功能设计的相关问题

    本文收集一些关于项目中为什么需要使用缓存功能,以及怎么使用等,在实际开发中对缓存的设计的考虑 为什么需要讨论缓存呢? 缓存是一个中大型系统所必须考虑的问题.为了避免每次请求都去访问后台的资源(例如数据 ...

  3. highchart去掉highcharts.com及导出

    右下角默认会有highcharts.com credits: { enabled:false} 导出服务用于Highcharts导出功能,即通过导出服务器将图表导出为常见图片格式或 PDF 文档. 默 ...

  4. java.sql.SQLException: 无效的列索引

    java.sql.SQLException: 无效的列索引 "无效的列索引"其实是个低级的错误,原因无非几个: 1.sql串的?号数目和提供的变量数目不一致: 例如:jdbcTem ...

  5. 项目实例——多表关联查询判断A的字段是否在B中,在显示该字段值,不在显示空;B的字段是否在C中,在显示该字段值,不在显示空。

    1.需求: (1)三张表A.B.C  三个表id相同,如果A表中的name在B表中的bname中显示aname值,否则显示空:如果C表中的addr在B表中的tel显示addr,否则显示空 2.实现方式 ...

  6. Android Studio高级配置

    转载:http://www.jianshu.com/p/4243f3b52644   Android Studio 提供了一个非常方便的功能帮助我们导入或者导出设置.因此我们在安装一个新的Androi ...

  7. 【BZOJ-4199】品酒大会 后缀数组 + 并查集合并集合

    4199: [Noi2015]品酒大会 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 436  Solved: 243[Submit][Status] ...

  8. NuGet包调试源码的方法

    如果按照nuget官网给出的网址:https://docs.nuget.org/create/creating-and-publishing-a-symbol-package 那么你会发觉下载符号包的 ...

  9. poj1113 凸包

    result=对所有点凸包周长+pi*2*L WA了一次,被Pi的精度坑了 以后注意Pi尽可能搞精确一点.Pi=3.14还是不够用 Code: #include<vector> #incl ...

  10. POJ3735 矩阵

    题意:有n只猫咪,开始时每只猫咪有花生0颗,现有一组操作,由下面三个中的k个操作组成:        1. g i 给i只猫咪一颗花生米        2. e i 让第i只猫咪吃掉它拥有的所有花生米 ...