等完全忽略click绑定,哪怕你写了addEventListener('click', handler)。
三类立竿见影的修复方案
方法一:把div/span换成button(推荐首选)
将原本不可点击的容器标签直接替换为语义化
方法二:强制激活click能力(兼容旧结构)
在对应元素CSS中添加两行声明:
cursor: pointer;
user-select: none;
这两行缺一不可:cursor: pointer让iOS识别为可交互区域,user-select: none防止长按唤起文字选择框干扰点击流。仅加cursor不够,仅加user-select也不行。
方法三:改用touchend替代click(防抖容错)
在JavaScript中将事件监听从'click'切换为'touchend':
document.querySelector('.js-submit').addEventListener('click', handler); → 改为:
document.querySelector('.js-submit').addEventListener('touchend', function(e) { e.preventDefault(); handler(); });
注意:touchend需搭配preventDefault()防滚动穿透,且要加300ms防误触,但无需额外引入库,原生即可运行。
排查必做项:两个隐蔽开关
第一步:检查是否启用了“低数据模式”
进入“设置”→“蜂窝网络”→“低数据模式”,若开启则Safari会禁用部分JS事件调度,导致按钮点击延迟或丢失——关闭后立即生效,无需重启。
第二步:验证当前页面是否被内容拦截器劫持
长按地址栏右侧的“重新载入”按钮→在弹出菜单里选【关闭内容拦截器并重新载入】。若页面立刻恢复正常,证明是AdGuard、1Blocker等扩展误杀所致,无需继续清除数据。