2012-08-18 9 views
5

div1transitionendイベントをバインドしました。 div1のトランジションが終了すると、イベントが実行されました。何も問題ない。エレメントの子の遷移が終了したときに遷移イベントを実行できる理由を教えてください。

私は特別なケースに遭遇:各段落の移行が終了したとき、私は、このdiv1に3つの段落を追加

を、div1transitionendイベントも走りました。したがって、transitionendイベントは4回実行されました。 >。

<はdiv1さんtransitionendイベントのリスナー関数の体では、私が見ることができるevent.target!== this。私はそれがかなりばかげていると感じる!

ChromeとFirefoxの両方にこの問題があります。だから、これはブラウザのHTML5仕様実装のバグではないと思います。

要素のtransitionendイベントがこの要素の子要素によってもトリガーされる理由を説明できる人はいますか?

ありがとうございます。

+0

あなたのコードを投稿することができますか? – tptcat

+0

この問題の再生コードは取得できません。しかし、私は 'transitionend'イベントのリスナー関数の本体に 'event.target!== this'があることを確認できます。私はこの奇妙な問題を理解できません。これはChromeとFirefoxの両方のバグだと思いますか? – weilou

答えて

9

イベントバブリングと呼ばれます。子要素で発生する多くのイベントは、イベントハンドラが元のオブジェクトに対して呼び出された後、デフォルトで親を介してバブルアップされます。 eventオブジェクトを調べることによって気付いたようにバブリングを検出することも、ソースオブジェクトでイベントを処理するときに伝播を停止してバブリングを防ぐこともできます。

IEを他のブラウザと比べて伝播を停止することは、IEの場合と異なります。他のブラウザでは、あなたが呼び出す:IE9前にIEで

event.stopPropagation() 

window.event.cancelBubble = true; 
+1

ありがとうございます。第一に、私は 'transitionend'イベントは特別なものでなければならないと思います。イベントバブリングチェーンに追加しないでください。したがって、W3CはHTML5の 'transitionend'イベントの仕様を改善する必要があります。第二に、私は本当に 'transitionend'イベントを3つの段落に結びつけません。だから、それはクロムとFirefoxのHTML5仕様実装のバグのバグだと思われる?私は3つの段落に 'transition'を設定します。 – weilou

+3

@WeiLou - 多くのイベントがバブル(クリック、キーなど)。それはthnigsがブラウザで動作する方法で、 'transitionend'は他のイベントと変わらない。あなたはただ今それを知り、それをコードする必要があります。イベントがこの特定のオブジェクトに属しているかどうかを知りたければ、 'event.target'を見て、それがあなたのオブジェクトと一致するかどうか、あるいは他のオブジェクトであるかどうかを確認してください。バブルは、状況によっては非常に便利です。 – jfriend00

+0

コメントありがとうございます。 :) – weilou

関連する問題