2012-03-16 8 views
1

このコードは、たとえばChromeではうまく動作しますが、Internet Explorer 8/9ではうまく動作しません。IEのjavascriptにeventListenerを追加

/* sitepoint.com/javascript-this-event-handlers */ 
function AttachEvent(element, type, handler){if (element.addEventListener){element.addEventListener(type, handler, false);}else{element.attachEvent("on"+type, handler);}} 

window.addEventListener("load", function() { 

      //do some stuff 

      AttachEvent(id, "click", function_name); 

}, false); 

IEはすでにaddEventListener行について不平を言っています。 代わりにattachEventを使う必要があると思います。これはどうすればいいですか?私は他のブラウザで動作しているコードを保持し、Internet ExplorerでattachEventのみを使用することをお勧めします。 このクロスブラウザはどのように互換性がありますか?

+0

これは、jQueryなどのJSライブラリが輝く場所です。 –

答えて

7

IE9 サポートaddEventListener()

既存の機能がattachEvent(および旧on*プロパティ)とどのように機能するかを示します。

// logic to attach the event correctly in IE9 
function AttachEvent(element, type, handler) { 
    if (element.addEventListener) { 
     element.addEventListener(type, handler, false); 
    }else if (element.attachEvent) { 
     element.attachEvent('on' + type, handler) 
    } else { 
     element['on' + type] = handler; 
    } 
} 

あなたは、ウィンドウのloadイベントを設定したい...

AttachEvent(window, "load", function() { 
    // ... 
});  

eventが古いIEを持つグローバルであることを忘れないでください。あなたが望むなら、その周りにスクリプトを書くことができます。それぞれの関数にこの callback()を呼び出すだけで、ユーザーが指定した正しい引数で handler()を呼び出すことができます。

var callback = function(e) { 
    e = e || window.event; 
    handler.call(element, e); 
}; 

あなたは離れて運ばれ、このようなtarget/srcElementとして、eventのプロパティを試してみて、正常化が、その後、あなたは、既存のライブラリを検討する必要があります得ることができました。

+0

ああ、はい、はい。私はちょうどその機能、良いアイデアを再利用することができます。私はそれを試してみる。 – reggie

関連する問題