2016-07-01 23 views
1

什麼參數傳遞給DOM onclick處理程序?如何解決參數/ DOM onclick處理程序的執行上下文是什麼?DOM onclick處理程序參數/執行上下文

看到這個jsbin(使用瀏覽器的開發者控制檯爲jsbin一個不是很好),或者下面的代碼:

<!-- Remove the id="someid" and see what happpens --> 
<input type="text" id="someid" onclick="clickHandler(this,event,someid)'"/> 

<script> 
    function clickHandler() { 
     console.log(arugments); 
    } 
</script> 

參考

MDN DOM on-event handlers

其他詳細信息

I意識到不建議在DOM中附加事件。但是這種技術仍然在遺留應用程序中使用,我找不到任何超越傳遞處理程序'this'參數的文檔。

+3

那麼你要問嗎?內聯事件處理程序中的參數顯然已通過,並且只是將它看作一個函數,您可以通過任何您想要的。你爲什麼'someid'指向元素會困惑,因爲任何具有ID的元素都被添加到全局'window.someid'作爲元素的引用? – adeneo

+0

@adeneo哦,我感到困惑這是全局的上下文,我不知道一個Id的元素被添加到相同的ID名下的窗口對象。你能指出我的任何文件,說帶有Id的元素被添加到窗口對象嗎? – ksrb

+0

http://stackoverflow.com/questions/3434278/do-dom-tree-elements-with-ids-become-global-variables – adeneo

回答

1

這是一個混淆我自己的例子,並且認爲綁定在HTML屬性中的處理程序有某種不同的執行上下文。

處理程序仍然在全局範圍/窗口對象中執行。因此,如預期的那樣,函數中的事件對象引用了window.event對象,而someid對象引用了window.someid。

<input type='text' id='someid' 
onclick=" 
    clickHandler(this, 
       event, //window.event 
       someid)" //window.someid'/> 

與唯一ID元素自動創建窗口對象的事我不知道,其中指出在問題的意見看:

Do DOM tree elements with ids become global variables?