2011-10-20 160 views
0

要延遲菜單onmouseover效果,setTimeout是其中一個選項。但是當我嘗試它時,函數不會被調用。setTimeout函數未被調用?

HTML:

<li><a href="#" 
     onmouseover="mopendelay('menu_proj')" 
    <li> 

的JavaScript:

// open hidden layer 
function mopen(id) 
{ 
    // cancel close timer 
    mcancelclosetime(); 

    // close old layer 
    if(ddmenuitem) ddmenuitem.style.visibility = 'hidden'; 

    // get new layer and show it 
    ddmenuitem = document.getElementById(id); 
    ddmenuitem.style.visibility = 'visible'; 

} 

// delay menu open on mouseover 
function mopendelay(id) 
{ 
    var delay = setTimeout(function(){ 
     alert('delay'); // isn't called 
     mopen(id); 
    }, 200); 
    clearTimeout(delay); 
} 

回答

4

你清除超時之前超時功能可以執行。

function mopendelay(id) 
{ 
    var delay = setTimeout(function(){ 
     mopen(id); 
    }, 200); 
} 
+0

OK。感謝所有的答案。如果我刪除清除時間,它就可以工作。我還必須刪除調試警報語句以獲得正確的響應。 – user823527

2

你立即調用由setTimeout返回的句柄clearTimeout。這是爲什麼?我相信如果您刪除該代碼,代碼將按預期工作。

0

之後直接打電話給clearTimeout。不管什麼?刪除該行,它會正常工作。

+0

感謝您的所有答案。 – user823527

0

您的清除超時應該在傳遞給setTimeout的函數之外