2016-05-30 80 views
2

上MDN下面的語句似乎並非如此:這和DOM在事件處理程序

當調用的事件處理程序,處理程序 內此關鍵字設置在其上的處理程序是的DOM元素註冊。 (source

這個聲明是關於an on<...> event handleraddEventListener

<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上的聲明不正確?

+0

我看不出有任何問題。我在那篇文章中看到*「TBD(非捕捉者)」*這不像是任何事情的最後一句話。該網站由社區維護,我相信有建議修改的選項。什麼是您的問題,實際上stackoverflow社區? –

+0

閱讀https://developer.mozilla.org/en-US/docs/MDN/Feedback *「首先,如果您發現文檔有問題,您應該隨時自行更正它」* –

+0

我的問題是:我的理解是不正確的還是MDN上的聲明不正確? –

回答

1

無論何時事件處理程序is inlined(如您在引用的句子後面的鏈接中所述),此聲明都是正確的。

但是,你的情況,MDN specify

當一個函數被用作事件處理程序,它的這種設置爲 元素從發射(事件有些瀏覽器不遵循這個 約定用於使用除 addEventListener)以外的其他方法動態添加的監聽器。

我已經在最新的Chrome & FF中測試過,這些瀏覽器不遵循這個約定。

+1

'某些瀏覽器?它應該是'大部分瀏覽器'。 –

+0

也許寫這個的人應該告訴讀者哪個瀏覽器遵循這個約定?也許IE6? –

+0

確實。無論如何,警告被告知。如果您想提供幫助,您可以通過在主要瀏覽器上提供您自己的測試結果來爲文檔做出貢獻! – Bigood

0

根據該規範,this事件偵聽器內/處理程序始終是事件的當前目標: