iPhone Safari游戏中的奇怪点击事件泡泡,它在冒泡到document.body之前停止

Jay*_*Lin 3 javascript html5 mobile-safari mobile-website

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

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

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

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

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

所以我徘徊为什么onclick事件在它冒泡到身体之前就停止了.

小智 8

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

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

可点击元素是以下之一:

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

  2. 目标元素,或任何其祖先多达但不包括<body>,具有明确的事件处理程序的任何鼠标事件的设置.此事件处理程序可能是一个空函数.

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

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

一个简单的解决方法是添加cursor: pointer到任何不符合此描述的元素.如果由于某种原因这不是一个选项,您可以向目标添加no-op事件处理程序或处理下面一级的单击document.body.

  • 说实话,这听起来确实像 Safari iOS 会做的事情。:D (2认同)