[英]What's 'this' in IE's attachEvent
我厌倦了编写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'是什么?
在由特定于IE的attachEvent
方法绑定的事件处理程序中, this
指的是全局window
对象:
btn.attachEvent('onclick', function(event) {
alert(this === window); // true
}
相反,在由标准addEventListener
方法绑定的事件处理程序中, this
指的是触发事件处理程序的DOM元素。
这是一个上下文引用,并在click事件发生时引用窗口,因为那是当时唯一存在的上下文。
我想你拼错了一个字。
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。
有什么评论吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.