2009-09-24 107 views
0

在代碼HTML +下面腳本,如何將參數傳遞給使用javascript附加的事件處理程序?

  • 事件處理程序頁面加載使用setAttribute(...)後附接。
  • 事件hander傳遞一個動態讀取的參數。
  • 的事件處理程序成功地連接(通過getAttribute(...)

驗證然而,該處理不火。

什麼是錯的下面?

<HTML> 
<BODY onload="loader();"> 
    <table> 
     <tbody> 
      <tr> 
       <td id="myId">FirstColumn</td> 
       <td id="otherId">SecondColumn</td> 
       <td id="lastId">Balderdash</td> 
      </tr> 
     </tbody> 
    </table> 
</BODY> 
<script language="javascript"> 
    function loader(){ 

    document.getElementById('myId').setAttribute('onmouseover','showMessage("'+document.getElementById('otherId').innerHTML+'");'); 
    alert(document.getElementById('myId').getAttribute('onmouseover')); 

    document.getElementById('myId').setAttribute('onmouseout','alert(\"'+document.getElementById('otherId').innerHTML+'\");'); 
    alert(document.getElementById('myId').getAttribute('onmouseout')); 
    document.getElementById('lastId').setAttribute('onmouseout','alert("hohoho");'); 

    alert(document.getElementById('lastId').getAttribute('onmouseout')); 
    function showMessage(aMessage){ 
     alert(aMessage); 
    } 
</script> 
</HTML> 

回答

0

蒂姆的那篇文章幫我弄明白了;儘管我的理解是經驗的。

除了作出直接轉讓

例如,

document.getElementById(...).onMouseOver = stuff; 
function stuff(){//do the Deed}; 

代替

document.getElementById(...).setAttribute(...); 

顯然,事件處理程序連接可能不接受任何參數。

我改變了我的處理程序簽名以接受0個參數,它的工作原理!

+0

不,在非IE瀏覽器中,您的事件處理函數將傳遞一個事件對象,這可能非常有用。在IE中,你必須通過window.event訪問事件。例如:el.onmouseover = function(evt){evt = evt || window.event;/*做事件對象* /}; – 2009-10-02 08:48:34

+0

Ty(+:那很有用 目前我們只是在瀏覽IE,儘管 – Everyone 2009-10-11 18:31:00

1

不要使用該代碼段setAttribute在DOM節點上設置事件處理程序只需使用事件處理程序屬性direct,併爲其分配一個函數而不是字符串:

document.getElementById('myId').onmouseover = function() { 
    showMessage(document.getElementById('otherId').innerHTML); 
}; 
+0

有兩個問題 - - IIRC處理程序不一定是匿名函數; Y/N? - 傳遞的參數是否需要轉義? – Everyone 2009-09-24 11:08:58

+0

正確,處理程序不一定是匿名函數。其次,我沒有太在意這個問題的轉義部分,但我認爲這一點不再是問題? – 2009-09-24 12:02:13

相關問題