2012-10-12 7 views
5

は奇妙な行動とiOS6、私は単純になるように、document.bodyにイベントハンドラをアタッチあればということであるのルートに非機能イベントの委任を体験:document.bodyにアタッチされたイベントリスナーは、iOS6で起動しませんか?

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

このdoesntのを私ならば、たとえば、実行しますgoogle.comにアクセスし、SafariのリモートWebインスペクタ経由で追加します。場合によっては、ページ上のリンクをクリックした場合や、イベントハンドラが直接アタッチされている要素をクリックした場合など、実行されることもあります。主要なブラウザとiOS 5と4ではうまくいきます。本体にtouchendを追加すると、それが起こる可能性がありますが、潜在的な回避策になる可能性がありますが、ブラウザがクリック検出をプログラムするのではなく、/touchend。これがiOS6バグかどうか疑問に思います。しかし、私は誰もこれについてまだ不平を言うのを見たことがない。

+0

私は、bodyの直接の子として単独で座っているdivにクリックハンドラをつけて、ページ全体をラップすると、うまくいきます。そして、副作用として、それは身体クリックイベントトリガーも同様に行います...子divにイベントが添付されていない場合、前と同じように、身体にイベントがトリガーされません。 – bonklers

答えて

0

@Bonkers ...クリックイベントをdivにアタッチした後にボディクリックがトリガーされる理由を参照するのは、イベントのバブリングのみに起因します。私はここにあなたのコードは、それが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;

+0

はい、これは問題ありませんが、バグではないので、体に取り付けられたリスナーが反応しないというバグです。一方、iOS5ではそうです。 – bonklers

関連する問題