【发布时间】:2013-05-25 08:49:05
【问题描述】:
看看这个小提琴(下面的部分代码sn-p):http://jsfiddle.net/QJJb8/
<button id='mybutton'>MY BUTTON</button>
mybutton.addEventListener('click', mybuttonClick, false);
function mybuttonClick(e){
alert(e.target.textContent+' WAS CLICKED!');
}
请注意我没有使用 getElementById() 来获取对按钮的引用。为什么它仍然有效? (在 Firefox、Chrome 和 IE9 & 10 中测试。)
这是不好的做法/怪癖,还是按钮元素的内置功能?如果是后者,那么在使用按钮元素时这是一个很棒的特权/快捷方式!还是我一直在过度使用 getElementById()?
//回答更新//////////////////////////////////// /////////////////////////p>
经过一些研究,似乎上面讨论的行为实际上是 HTML5 规范的一部分。除了下面 RobG 的回答之外,另请参阅以下链接以获取更多信息:
http://tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/
https://stackoverflow.com/a/3434388/2434324(链接由 yoelp 提供)
【问题讨论】:
-
之所以有效,是因为您从单击事件侦听器(即“e”参数)中获取了对按钮本身的引用,然后您将使用它来显示按钮的文本
-
@FilipposKarapetis——但不添加监听器。
-
@FilipposKarapetis - 实际上,我的具体问题是在它到达“e”事件侦听器之前 - 为什么该函数首先起作用?注意 mybutton 没有在任何地方声明。它在 HTML id 中给出,然后直接引用:mybutton.addEventListener(没有 getElementById)。
标签: javascript button getelementbyid addeventlistener