繁体   English   中英

IE的attachEvent中有什么'this'

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM