Re: イベントリスナーの話

僕は普段、Mozilla系アプリで動かすためにしかJavaScriptは書かなくて、クロスプラットフォームの話は弱いのだけれど。

function addEvent(element,event,func){
  if(element.addEventListener){
    element.addEventListener(event,func,false);
  }else if(element.attachEvent){
    element.attachEvent('on'+event,func);
  }else{
    element['on'+event] = func;
  }
}
勉強会補足 - about:blank

id:dankogai氏が紹介しているTipsは衝撃的だったので今でも覚えていてる。

これだとaddListener()実行のたびに、ブラウザー判定の条件分岐する必要があります。百回使えば百回ブラウザー判定をしてしまうのです。

以下のようにかけば、条件分岐は最初の一回で済みます。

var addListener = (function() {
    if ( window.addEventListener ) {
        return function(el, type, fn) {
            el.addEventListener(type, fn, false);
        };
    } else if ( window.attachEvent ) {
        return function(el, type, fn) {
            var f = function() {
                fn.call(el, window.event);
            };
            el.attachEvent('on'+type, f);
        };
    } else {
        return function(el, type, fn) {
            element['on'+type] = fn;
        }
    }
})();
404 Blog Not Found:Digest - 今日にでも使うべきJavaScriptの7つのテクニック

イベントリスナ系をそう何度も使用することはないと思うから気にするほどじゃないとは思うけど、こちらの方が効率が良いのは確かだと思う。