2009-10-07 18 views
2

請告訴我什麼是錯,此代碼:分配「的onmouseover」事件處理

<script type="text/javascript" > 

function createimg() 
     { 
     var img = new Image(); 
     img.src='link/to/image'; 
     img.alt='Next image'; img.id = 'span1'; img.style.zIndex = 10; 
     img.style.position = 'absolute'; img.style.display='block'; img.style.top = '130px'; 
     img.style.padding='10px'; img.style.left='440px'; img.className ='dynamicSpan'; 
     document.body.appendChild(img); 
     return img; 
     } 

    function al() 
    { 
    alert('loaded'); 
    } 
    a = createimg(); 

    a.onmouseover = al(); 

</script> 

在具體的最後一部分,在這裏我想分配的了「的onmouseover」事件處理程序,是一個圖像元素。它不會因爲某種原因分配此事件處理程序,而只是在頁面加載時執行該功能。

出了什麼問題?

託尼

+1

小心使用硬編碼'id',作爲與DOM中相同的ID不止一個元素將違反HTML規範。 – 2009-10-07 22:13:57

回答

13
a.onmouseover = al; 

當你寫al()你調用當場的功能和作用的返回值(這是不確定的,因爲沒有return語句)分配給a.onmouseover。相反,你想分配函數本身,所以你只需要刪除括號。

+1

+1給出原因爲什麼 – 2009-10-07 22:11:44

+0

還擊敗了我。是的,這是正確的答案。 – 2009-10-07 22:12:52

+0

有幫助!但現在我的al功能根本不執行,即使在圖像的鼠標懸停上也沒有。其他事情可能是錯的嗎? – 2009-10-07 22:13:58

0

嘗試

a.onmouseover = al; 

,而不是

a.onmouseover = al(); 
2

嗯,首先,你的代碼是不是在某種程度上,可以很容易閱讀格式。

但你的問題是在這裏:

a.onmouseover = al(); 

你真正想要的是:

a.onmouseover = al; 

()操作調用功能。因此,表達式al()等於執行功能al的結果 - 這意味着al函數必須在其結果(在本例中爲undefined)分配給a.onmouseover之前執行。

相反,如果你只是用al,表達等於函數對象al,這是你真正想要分配給哪些活動。在這種情況下,當事件被觸發時,al函數被執行。

0

替換:

a.onmouseover = al();

有了:

a.onmouseover = al; 
相關問題