移动开发那些坑之——safari mobile click事件的冒泡bug

时间:2021-03-07 23:56:59

今天在iphone6 plus的safari上测试这么一段代码:

<script>
$(document).on('click','.callApp', function() {
alert("hehe");
})
</script>
<div class="callApp caMiddle">打开app,马上参加活动</div>
<a href="javascript:;" class="callApp caMiddle">打开app,马上参加活动</a>
<img src="http://news.baidu.com/resource/img/logo_news.gif" alt="test" class="callApp">

发现,点击<img>和<a>是可以触发事件的,但是点击<div>无效。

1.起初,我以为是引用的zepto的问题,后来用了jquery之后,发现也是这个表现,并且,PC和Android设备都没有问题,唯独ios的safari无法触发事件。

2.我把click事件换成touchstart之后,事件又都可以触发了。

怪异。

3.难道是事件代理Safari不支持?我尝试去掉代理直接注册事件,测试发现,ok了。

4.那,我把事件代理到body下面的某一个div容器上,继续测试,发现也是ok的。

5.难道是safari事件冒泡,没有冒到document上来?测试下面一段代码:

document.addEventListener("click",function(e){
alert(e.target.tagName)
},false)

5.果然,还是跟最开始的现象一样,点击<img>和<a>是可以触发,点击<div>无效

6.google了一下,果然这个万恶的safari是有bug的,我英文不好,大家可以去看下这个http://www.quirksmode.org/blog/archives/2010/10/click_event_del_1.html

解决方案

方案1.
添加样式body{cursor:pointer}——原因很奇葩,参见http://*.com/questions/10165141/(推荐)
备注:这里最好通过js动态判断是ios再加此样式;如果都加上,那Android设备会出现点击屏幕全屏出现浅蓝色或浅红色<a>触感反馈的样式遮罩。

方案2.
使用zepto.js的1.0rc1版本的tap事件——没有仔细看文档,经我测试V1.0-1.1.6等等这几个版本都不好使(tap有一个很傻比的地方,你摁住慢慢滚屏的时候,tap会触发,其实只是在滚屏,但是它似乎模拟click的时候没有去判断start和end的偏移范围)

3.欢迎交流

移动开发那些坑之——safari mobile click事件的冒泡bug的更多相关文章

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

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

  2. 移动端click事件延迟300ms的原因以及解决办法

    这要追溯至 2007 年初.苹果公司在发布首款 iPhone 前夕,遇到一个问题 —— 当时的网站都是为大屏幕设备所设计的.于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点 ...

  3. 移动端click事件延迟300ms的原因以及解决办法&lbrack;转载&rsqb;

    原文:http://www.bubuko.com/infodetail-822565.html 这要追溯至 2007 年初.苹果公司在发布首款 iPhone 前夕,遇到一个问题 —— 当时的网站都是为 ...

  4. 关于IOS浏览器:document&comma;body的click事件触发规则

    今天做了个手机页面,点击某个按钮->弹出菜单,再点击菜单以外的任意位置->关闭菜单,在其他浏览器里面没有问题,但是在IOS浏览器中并不会关闭. 网上解决这个bug的帖子很多,这篇帖子主要是 ...

  5. click事件触发也有失灵的时候?

    今天做了个手机页面,点击某个按钮->弹出菜单,再点击菜单以外的任意位置->关闭菜单,在其他浏览器里面没有问题,但是在IOS浏览器中并不会关闭. 网上解决这个bug的帖子很多,这篇帖子主要是 ...

  6. [转]iOS Safari 中click点击事件失效的解决办法

    iOS Safari 中click点击事件失效的解决办法 问题起因: 在微信公众号开发(微站)过程中用jquery的live方法绑定的click事件点击无效(不能执行) 问题描述 当使用委托给一个元素 ...

  7. iOS Safari 中click点击事件失效的解决办法

    问题起因: 在微信公众号开发(微站)过程中用jquery的live方法绑定的click事件点击无效(不能执行) 问题描述 当使用委托给一个元素添加click事件时,如果事件是委托到 document  ...

  8. 移动端开发用touch事件还是click事件

    前端开发现在包含了跨浏览器,跨平台(不同操作系统)和跨设备(不同尺寸的设备)开发. 在移动开发的过程中,到底选取touch事件还是click事件?对了,请不要鄙视click,click在移动端开发用着 ...

  9. 点击label时click事件被触发两次的坑

    今天帮群里的朋友看一段代码的时候偶然间遇到一个label的坑,点击label的时候,监听的click事件被执行两次: 具体代码如下: <div id="test"> & ...

随机推荐

  1. 查找代码错误&period;java

    class Other{ public int i; } class Something{ public static oivd main(String[]args){ Other o = new O ...

  2. 如何创建一个Android项目

    第一步: File -->New ---->Android Application Project 点击创建 第二步:接下来是几个下拉选择框. Minimum Required SDK 是 ...

  3. Oracle存储过程 输出参数赋值异常:&OpenCurlyDoubleQuote;Oracle&period;DataAccess&period;Types&period;OracleString”的类型初始值设定项引发异常。

    场景: 写了一个有返回参数的存储过程,在个另开发人员机器上都正常.其它机器报如题错误.让人郁闷的是,所有调用方都是客户端,根本不存在网上众贴所说的版本不一致问题. 分析: 虽然网上的帖子没有根本解决问 ...

  4. 为EasyUI 的Tab 标签添加右键菜单

    在网上看了很多demo 自己实现了一个效果如下 ps jquery1.7.2 jQuery EasyUI 1.3.6easyui QQ群:15129679 <!doctype html> ...

  5. HDU 1018 Big Number (数学题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1018 解题报告:输入一个n,求n!有多少位. 首先任意一个数 x 的位数 = (int)log10(x ...

  6. windows phone &lpar;18&rpar; Border元素

    原文:windows phone (18) Border元素 Border类是对某一个对象的周围边框,背景,或者同时绘制两者,首先看一个简单的例子进行分析[作者:神舟龍] xaml文件: <!- ...

  7. VUE环境配置步骤及相关Git Bash命令的使用

    组件式开发中,一定少不了Vue,废话少说,开始进行Vue应用前的关键性配置 备注:(为方便进行配置,提前可以安装Git bash,下载路径——https://git-scm.com/downloads ...

  8. Leetocde&lowbar;242&lowbar;Valid Anagram

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/48979767 Given two strings s an ...

  9. node02

    1.使用已有的知识实现一个简单的登录和注册的界面 请求有请求接口有请求页面的,我们需要加以区分 以下是客户端代码 <!DOCTYPE html> <html lang="e ...

  10. java EE&lpar;1&rpar;

    1.安装eclipse javaEE版本,配置好Tomcat服务器(略) 2.新建项目: Dynamic web project 3.创建服务器,并选择项目发布目录 4.添加项目: 右键服务器,选择A ...