[]addEventListener
モダンなJavaScriptコードでは、
document.getElementById("result").onclick = func;もあまりクールとは言えないようで、「addEventListener」を使うのがクールなようです。
但し、FirefoxとIEで実装が微妙にちがうようです。
ということで、クロスブラウザ対応のaddEventListenerを考えてみました。
パターン1は普通に考えるとこんな感じになりがちかなと思いますが、
毎回判定が実行されてしまうので、あまりよろしくないと思います。
JavaScript的に実装するのであれば、パターン2かパターン3が良いかと思います。
//パターン1
//普通にやるとこんな感じ。
// これだと毎回判定が必要になる。
var addListener = function(elm, type, func){
if(window.addEventListener) {
elm.addEventListener(type, func, false); //W3C
} else {
elm.attachEvent('on' + type, func); //IE
}
}//パターン2
//処理結果として、関数を戻す。
// この場合、window.addEventListenerの判定は1回のみで、
// 後は戻された関数が実行される。
var addListener = function(){
if (window.addEventListener) {
return function(elm, type, func){
elm.addEventListener(type, func, false); //W3C
}
} else {
return function(elm, type, func){
elm.attachEvent('on' + type, func); //IE
}
}
}();//パターン3
//上記のパターン2の三項演算子版
var addListener = ( window.addEventListener ?
function(elm, type, func){
elm.addEventListener(type, func, false); //W3C
} :
function(elm, type, func){
elm.attachEvent('on' + type, func); //IE
}
);