没有调用setTimeout函数?

时间:2011-10-20 23:57:20

标签: javascript

为了延迟菜单onmouseover效果,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 个答案:

答案 0 :(得分:4)

您可以在执行超时功能之前清除超时。

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

答案 1 :(得分:2)

您立即在clearTimeout返回的句柄上调用setTimeout。这是为什么?我相信如果删除它,代码将按预期工作。

答案 2 :(得分:0)

您之后直接致电clearTimeout。无论如何?删除该行,它将正常工作。

答案 3 :(得分:0)

您的清除超时应该超出传递给setTimeout

的函数