2012-02-09 12 views
7

jQueryを書くことに飽き飽きしていますので、生のJavaScriptを学ぶことにしました。 IEのattachEventの何かが私を混乱させました。ここにコードがあります。IEのattachEventで 'これ'とは何か

var btn = document.getElementById('myBtn'); 

btn.onclick = function(){ 
    alert(window.event.srcElement === this); //true, I know why. 
}; 

btn.attachEvent('onclick', function(event){ 
    alert(event.srcElement === this); //fasle, but why? 
}); 

私はIEの内蔵デバッグツールを使用しようとするが、それは単に「これは」オブジェクトですが、より多くの何も... はそうIEのattachEventで「この」何ていないことを私に言いましたか?

+0

コンソールに 'this'を出力してみてください。 'console.log(this)'を使用してください。 – Joseph

+0

私はそれを試みますが、IEはそれがオブジェクトであると私に言っただけです。 – shawjia

+1

あなたはタイプ "srcElemnt"を見つけましたか? "e"がなければ、そのイベントプロパティは未定義です(と!== this)。 – Bergi

答えて

7

グローバルwindowオブジェクトを参照:これとは対照的に

btn.attachEvent('onclick', function(event) { 
    alert(this === window); // true 
} 

、標準addEventListener方法、thisによって結合イベントハンドラ内を指しイベントハンドラがトリガされたDOM要素。

0

これはコンテキスト参照であり、その時点で存在する唯一のコンテキストであるため、クリックイベントが発生したときの参照ウィンドウです。

0

私はスペルミスペル1単語だと思います。



    btn.attachEvent('onclick', function(event){ 
      alert(event.**srcElement** === this); 
    }); 

対応する関数addEventListenerをchromeおよびffでテストしたところ、どちらもtrueを返しました。

IE doはfalseを返します。おそらく、IEがbtn.onclick = fnを扱うからです。とbtn.attachEvent()を別の方法で実行します。 IEは、グローバル値(ウィンドウ)をbtn.attachEvent()メソッドに渡します。 これをテストすることができます===ウィンドウ、trueを返します。

何かについてのコメントはありますか? IE固有attachEvent方法、thisによって結合イベントハンドラ内

+0

固定。まだ偽です。 – shawjia

関連する問題