Home > 技術 > addEventListenerとattachEventでは実行される順番が違う

addEventListenerとattachEventでは実行される順番が違う


たとえばPrototype.jsを使っている場合、

こんな感じでイベントを登録することができる。
また同じオブジェクト(window)に対して同じイベント(load)を指定した場合は、追加として登録される。
なので上書きはされない。

こうゆう場合にIEとIE以外では挙動が違うので一応メモを残しておきます。

IEのattachEventの実行順序

一番最後に追加されたイベントから一番最初に追加されたイベントにさかのぼるように実行される。

なので上記のコードでは2→1

IE以外ののaddEventListenerの実行順序

一番最初に追加したイベントから一番最後に追加されたイベントを実行される。

なので上記のコードでは1→2

まとめ

初めPrototype.jsが何かしているのかと思ったのですが、とくにそれっぽい箇所がなく以下のように自作した関数でも再現したため、こうゆう挙動は一般的なんでしょうね。

一番最初に登録したイベントから実行されるのを望む場合はIEとIE以外で挙動が違うのでハマる危険性がありますね。

追記:
IEのイベント実行順序は不定? - inamenaiの日記でさらに実験をしていただきました。
attachEventは単純に逆順になるわけではなくランダムだそうですw
でも何度か実行しても同じ順序になるようなので、何か法則でもあるんでしょうか・・・

Trackback:1

TrackBack URL for this entry
http://hisasann.com/cgi-bin/mt/mt-tb.cgi/1118
Listed below are links to weblogs that reference
addEventListenerとattachEventでは実行される順番が違う from HouseTect, JavaScriptな情報をあなたに
[JavaScript]IEのイベント実行順序は不定? from inamenaiの日記 2008-09-16 (火) 19:22
IEのattachEventの実行順序 一番最後に追加されたイベントから一番最初に追加されたイベントにさかのぼるように実行される。 なので上記のコードで...

Home > 技術 > addEventListenerとattachEventでは実行される順番が違う

Tag cloud
カテゴリー
月別アーカイブ
Powered by
Powered by
Movable Type Commercial 4.261

Page Top