Javascript 这与事件处理程序上的DOM无关
以下关于MDN的陈述似乎不正确: 调用事件处理程序时,处理程序中的this关键字 设置为注册处理程序的DOM元素。 () 此语句是关于Javascript 这与事件处理程序上的DOM无关,javascript,dom,Javascript,Dom,以下关于MDN的陈述似乎不正确: 调用事件处理程序时,处理程序中的this关键字 设置为注册处理程序的DOM元素。 () 此语句是关于on事件处理程序的notaddEventListener <p><a id="link" href="#" onclick="EventHandler();">click me</a></p> <script> function Eve
on事件处理程序的notaddEventListener
<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>
函数EventHandler(){
console.log(this);
//处理程序中的this关键字未设置为DOM元素
//它设置为窗口对象
}
这与MDN上的声明相矛盾
当然,您可以将this
作为参数传递给EventHandler
,也可以简单地使用addEventListener
。但这与主题无关
问题的主题是this
和on事件处理程序
<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设置为
元素从触发的事件(某些浏览器不遵循此
使用其他方法动态添加的侦听器的约定
addEventListener)
我在最新的Chrome&FF中测试过,这些浏览器不遵循这个惯例 根据规范,此
内部事件侦听器/处理程序将始终是事件的当前目标:
- :
调用侦听器的回调的
handleEvent
,并传递事件
将此算法作为第一个参数和事件的currentTarget
属性值为
-
- 如果E是一个对象,而的类型为
回调函数有五个参数[…],回调函数将此值设置为E的
currentTarget
- 否则
带有一个参数的回调,该参数的值为对象E,回调值设置为
E的当前目标
currentTarget
我看不出有任何问题。我在那篇文章中看到一个*“TBD(非捕获侦听器)”*。。。这不像是任何事情的最终决定。该网站由社区维护,我相信有一个建议编辑的选项。对于stackoverflow社区,您的问题是什么?请阅读“首先,如果您发现文档有问题,您应该随时自行更正。”我的问题是:我的理解是不正确的还是MDN上的声明是不正确的?我不能仅仅因为我认为其他人的内容不正确就修改他们的内容。谁能如此自信?至少在我这么做之前,我应该听取其他同行的意见。完全同意。你应该更新你的帖子,这样帖子的意图就会清晰,人们就会知道你想要的答案。现在它只是陈述你的发现。一些浏览器
?大多数浏览器都应该是。也许写这篇文章的人应该告诉读者哪些浏览器遵循这个惯例?也许是IE6?真的。不管怎样,警告已经被告知。如果您想提供帮助,您可以通过在主要浏览器上提供您自己的测试结果来为文档做出贡献!至于内联事件处理程序
,我认为我的问题中的onclick=“EventHandler();”
是内联事件处理程序
。OP询问的是内联事件处理程序,你也在另一篇文章中提问。。。引用的一篇文章似乎有不正确的信息/误导性