5

iOS6 で奇妙な動作と機能しないイベント委任が発生しました。その根本は、単純にイベント ハンドラーを document.body にアタッチした場合です。

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

これは実行されません。たとえば、google.com にアクセスして、safari リモート webinspector 経由で追加した場合です。ページ上のリンクをクリックした場合や、イベント ハンドラーが直接アタッチされている要素をクリックした場合など、場合によっては実行されます。同じことが主要なブラウザーや iOS 5 および 4 でも問題なく動作します。ボディに touchend を追加すると、必要に応じてトリガーされ、潜在的な回避策になる可能性がありますが、touchstart でクリック検出をプログラムするよりも、ブラウザーにクリックを検出させることをお勧めします。 /タッチエンド。これは iOS6 のバグなのだろうか。しかし、これについて不平を言う人はまだ見たことがありません。

4

2 に答える 2

0

@Bonkers ...クリックイベントをdivにアタッチした後にボディクリックがトリガーされる理由を参照するのは、単にイベントのバブリングによるものです。

ここでコードを複製し、div で 2 回呼び出され、本体では 1 回だけ呼び出されることを示します。

<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 に答える