IE的attachEvent中有什么'this'

时间:2012-02-09 02:53:43

标签: javascript internet-explorer javascript-events

我厌倦了编写jQuery,所以我决定学习一些原始的JavaScript。 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中的'this'是什么?

3 个答案:

答案 0 :(得分:7)

在由特定于IE的attachEvent方法绑定的事件处理程序中,this引用全局window对象:

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

相反,在由标准addEventListener方法绑定的事件处理程序中,this指的是触发事件处理程序的DOM元素。

答案 1 :(得分:0)

这是一个上下文引用,并且在click事件发生时引用窗口,因为那是当时唯一存在的上下文。

答案 2 :(得分:0)

我想你错了一个字。



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

我在chrome和ff中测试了相应的函数addEventListener,它们都返回true。

IE确实返回false。也许是因为IE处理btn.onclick = fn;和btn.attachEvent()以不同的方式。 IE将全局值(窗口)传递给btn.attachEvent()方法。你可以测试这个===窗口,它会返回true。

有关它的任何评论吗?