2011-10-20 44 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的函数之外