アフィリエイト広告を利用しています
最新記事
日別アーカイブ

広告

posted by fanblog

2012年07月01日

イベント登録順で処理されない

比較的知られている話ですが、addEventListener, attachEvent で、
イベントハンドラを複数登録できます。

複数登録されたイベントハンドラは、つい登録した順番に実行されるのかと思いましたが、
保証されているわけではありません。実際に、実行順序が登録順ではない場合もあるようです。

もし、各ライブラリが完全独立していて、
イベントハンドラを登録順に実行したい場合はどのようにすればよいかというと、
登録したいイベントハンドラを配列に格納しておき、
配列の中身を順番に実行する処理を、ひとつだけイベントハンドラとして
登録しておく手段があります。

だいたい、以下のようなコードになると思います。

var onloader = function() {

 var self = arguments.callee;
 var handlers = [];

 self.addEvent = function(func){
  handlers.push(func);
 }

 // onLoad 処理で、イベントハンドラが登録された順番に実行する
 function onLoad(){
  for(var ind = 0, max = handlers.length; ind < max; ind++) {
   if(handlers[ind]) {
    handlers[ind]();
   }
  }
 }

 // イベントハンドラ登録
 if(window.attachEvent) {
  window.attachEvent('onload', onLoad);
 } else if(window.addEventListener) {
  window.addEventListener('load', onLoad);
 }

 return self;
};
【このカテゴリーの最新記事】
posted by FJT at 22:32| javascript
プロフィール
FJTさんの画像
FJT
使えそうな技術情報を掲載しています。 ぜひ、役立ててください。
プロフィール
リンク集
×

この広告は30日以上新しい記事の更新がないブログに表示されております。