前言
今年都在写移动端页面,但是大多数用的都是框架,很少出现事件兼容问题。今天用原生写了个ios的页面,事件兼容花了约120',必须要记录一下。
click事件兼容
正常解决ios上click事件失效方法有这几个方法:
- 添加cursor: pointer;这个属性(主要针对div、span)等不可点击的元素
- 把目标元素改成a、button标签
- 把click事件换成touchstart或touchend事件,(配合使用e.preventDefault)
- 将 click 事件委托到非 document 或 body 的父级元素上
我本身使用的就是事件委托,但挨个试了,依旧没有效果,想到家里的娃娃,泪奔~。
但是本着一个伪程序媛bug没有改完怎么能下班的精神,还是继续找原因。
分析方法
- 常用click事件失效解决方法 —— 无效
- a 标签直接点击 —— 正常
- 目标元素换成a标签 —— 无效
这样下来,只能是我的方法可能存在某些问题,继续分析:
- 改成事件捕获 —— 无效
- 改成事件冒泡 —— 无效
- 部分事件捕获部分冒泡 + 事件一开始先弹alert —— alert正常弹出
问题找到了,肯定某行代码报错了,一行一行找。
最后问题是:我用event对象中的path属性,但是在safari中为undefined
解决方案:
const path = event.path || (event.composedPath && event.composedPath());
在fireFox下好像也有这个问题,我没有亲测,不确定。
本来想查Android和iphone下event具体差别,奈何今天没有时间了,明天补上。
后记
希望未来某一天,某家浏览器一统天下,解放我们这些前端狗。哈哈哈
欢迎跟我一起挖坑、填坑,哈哈哈
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。