看看這個小提琴(以下部分的代碼片段):http://jsfiddle.net/QJJb8/addEventListener()沒有getElementById引用成功?
<button id='mybutton'>MY BUTTON</button>
mybutton.addEventListener('click', mybuttonClick, false);
function mybuttonClick(e){
alert(e.target.textContent+' WAS CLICKED!');
}
注意如何我不使用的getElementById()來獲取到按鈕的引用。爲什麼它仍然有效? (經過Firefox,Chrome和IE9的測試)
它是不是很好的做法/怪癖,還是它構建在按鈕元素的功能?如果是後者,那麼在使用按鈕元素時,這是一個非常棒的振作/快捷鍵!或者,也許我只是過度使用getElementById()所有這一次?
//回答更新////////////////////// ////////////////////////////
經過一番研究,似乎上面討論的行爲實際上是HTML5規範的一部分。除了下面RobG的答案,也請參閱以下鏈接來了解詳情:
http://tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/
https://stackoverflow.com/a/3434388/2434324(由yoelp提供鏈接)
http://jsperf.com/named-access-on-the-window-object
它的工作原理因爲您從click事件監聽器(即「e」參數)獲取對按鈕本身的引用,然後使用該參數顯示按鈕的文本 –
@ FilipposKarapetis - 但不添加監聽器。 – RobG
@FilipposKarapetis - 實際上,我的具體問題是在它到達「e」事件監聽器之前 - 爲什麼函數首先工作?注意mybutton沒有在任何地方聲明。它在HTML id中給出,然後直接引用:mybutton.addEventListener(不帶getElementById)。 – calipoop