5

在 iOS6 中遇到奇怪的行为和不起作用的事件委托,其根源是如果我只是将事件处理程序附加到 document.body,如下所示:

document.body.addEventListener("click", function(){alert("ios6 sucks")}, false);

这不会运行,例如,如果我去 google.com 并通过 safari 远程 webinspector 添加它。在某些情况下,它会运行,包括如果我单击页面上的链接,或者单击直接附加了事件处理程序的元素。在主流浏览器以及 iOS 5 和 4 上也可以正常工作。将 touchend 添加到 body 将按原样触发,并且可能是一种潜在的解决方法,但最好让浏览器检测点击,而不是必须在 touchstart 中编写一些点击检测/触摸结束。我想知道这是否是iOS6错误。但我还没有看到其他人抱怨这个。

4

2 回答 2

0

@Bonkers ...引用为什么将click事件附加到div后触发body click完全是由于事件冒泡。

我在这里复制了您的代码,表明它在 div 上被调用了两次,但在正文上只调用了一次:

<div id="myDiv">FlackAttack Test</div>

<script>
document.body.addEventListener("click", function(){alert("ios6 sucks")}, false);
document.getElementById('myDiv').addEventListener('click', function(){alert("ios6 sucks twice")},      false);
</script>

如果你想阻止事件冒泡,你可以调用 e.stopPropagation(); 或 e.cancelBubble = true;

于 2012-10-26T09:27:09.383 回答
0

面临同样的问题。以下帮助(省略.body):

document.addEventListener("click", function(){alert("ios6 sucks")}, false);
于 2020-12-21T13:45:53.343 回答