这和DOM事件处理程序

时间:2016-05-30 12:54:54

标签: javascript dom

关于MDN的以下声明似乎不正确:

  

调用事件处理程序时,处理程序中的this关键字   设置为注册处理程序的DOM元素。   (source

此声明约为an on<...> event handler而不是addEventListener

<p><a id="link" href="#" onclick="EventHandler();">click me</a></p>

<script>
    function EventHandler() {
        console.log(this); 
    //the this keyword inside the handler is NOT set to the DOM element
    //it sets to the window object
}
</script>

与MDN上的陈述相矛盾。

当然,您可以将this作为参数传递给EventHandler,或者只使用addEventListener。但这不是主题。

问题的主题是thisan on<...> event handler

我的问题是:我的理解是不正确还是MDN上的陈述不正确?

2 个答案:

答案 0 :(得分:1)

每当事件处理程序is inlined发出此声明时,就在您引用的句子之后的链接中说明了这一说法。

但是,在您的情况下,MDN specify

  

当一个函数用作事件处理程序时,它的设置为   元素事件是从触发的(某些浏览器不遵循这一点   使用除以外的方法动态添加的侦听器约定   的addEventListener)

我已经测试过最新的Chrome&amp; FF,这些浏览器不遵循这个惯例。

答案 1 :(得分:0)

根据规范,事件监听器/处理程序中的this将始终是事件的当前目标: