iPhone safari 上的奇怪点击事件气泡在冒泡到 document.body 之前停止

2024-03-14

我已将点击事件绑定为 document.body.onclick = function(){alert("aaa")};

无论我点击什么元素,它在 Android 上或 IOS 上的 Chrome 上都表现良好。 但在 iPhone safari 上单击除 a 和 img 元素之外的元素时不会触发它。

但它可以在绑定 touchstart 事件时冒泡到 body。

最后,我必须添加到 div(#main) 以包含我的所有元素,然后将委托对象绑定到该 div 上。

document.querySelector("#main").onclick = function(){alert("aaa")}

所以我想知道为什么 onclick 事件在它冒泡到主体之前停止。


我知道这已经很老了,但当我遇到同样的问题时,我仍然设法将其挖掘出来。

简而言之,iOS Safari 中的鼠标事件不会冒泡到document.body除非 iOS Safari 认为事件目标是可点击元素。

可点击元素是以下元素之一:

  1. 事件的目标元素是链接或表单字段。

  2. 目标元素或其任何祖先元素但不包括 the <body>,为任何鼠标事件设置了显式事件处理程序。该事件处理程序可能是一个空函数。

  3. 目标元素或其任何祖先元素(包括文档)都有一个cursor:pointer CSS 声明。

(引自here http://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html,强调我的。)

可能的修复包括:

  • Add cursor: pointer任何不符合描述的元素。
  • 将无操作事件处理程序添加到目标。
  • 处理下一级的点击document.body.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iPhone safari 上的奇怪点击事件气泡在冒泡到 document.body 之前停止 的相关文章

随机推荐