2

:IE8でIE 8 - クリックイベントが<html>要素まで貫通していますか?簡単に言えば

jQuery("html").click(function(e){ 
    if (e.target == this){ 
     alert("this really shouldn't happen"); 
    } 
}); 

を、アラートが他の要素の中にネスト要素を含むページ上の多くの場所を、トリガされました!このような奇妙な行動を引き起こすものはありますか?

これは、クリックイベントがドキュメント内部の要素にバインドされたすべてのハンドラをバイパスし、ドキュメント自体(、直接、委任されていない)で直接トリガするため、重大な問題です。私もIE8の開発者ツールを使用しているときに何かが、私は「クリックで要素を選択」ツールを使用し、問題の場所の上にカーソルを置くだろうというとき、それは「箱だろう...アップした疑いがある

EDIT

"その場所に子孫が存在しないかのようにドキュメント全体が更新されます(そして、はい、Dev Toolsがドキュメントの最新のスキーマを持っていることを確認するためにRefreshをクリックしました)。

EDIT 2

は、私が言及するのを忘れて申し訳ありません...これらのトラブルスポットの一つが「DL」の要素である...多分IE8はこれらによって混乱してしまうと、ちょうど文書にイベントを手渡しますか?

+0

私はイベントバブリングが何であるかをよく知ってる...しかし、e.targetがクリックされた最初の要素を表し、ハンドラにバインドされた要素は、(HTTPが表示されません://api.jquery.com/event.target/)。 e.targetと "this"が等しい場合は、子孫ではなくバインドされた要素をクリックすることによってハンドラがトリガされたことを意味します。 –

+0

興味深い。バギー。 'e.stopImmediatePropagation()'を使うと同じことが起こりますか?あなたはそれが必要であると言っているわけではなく、それがバグの回避策であるかどうか疑問に思うだけです。 –

答えて

1

これは、イベント "バブリング"とイベント "キャプチャ"の違いによるものです。

このページでは、それをうまく説明:http://www.quirksmode.org/js/events_order.html

+0

ページの他の場所が正常に動作し、jQuery(おそらくは)がバブリング/キャプチャを正規化しているので、これが本当に疑わしいです。しかし、リンクに感謝します。 –

+0

@Matt:jQueryはここではあまりできません。バブリングフェーズでイベントハンドラのみをバインドします。 IEは単にキャプチャをサポートしていません。つまり、私はあなたの問題に関連しているとは思わない。 –