4

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

无论我点击什么元素,它在 IOS 上的 android 或 chrome 上都做得很好。但它不会在 iPhone safari 上触发,同时单击除 a 和 img 元素之外的元素。

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

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

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

所以我在徘徊为什么onclick事件在它冒泡之前停止。

4

1 回答 1

9

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

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

可点击元素是以下之一:

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

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

  3. 目标元素,或者它的任何祖先,包括文档,都有一个 cursor:pointer CSS 声明。

(引自这里,强调我的。)

可能的修复包括:

  • 添加cursor: pointer到任何不符合描述的元素。
  • 向目标添加无操作事件处理程序。
  • 处理下一级的点击document.body
于 2016-12-22T16:12:42.383 回答