我厌倦了编写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'是什么?
答案 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。
有关它的任何评论吗?