2009-07-01 84 views
0

我想设置时间让我的子菜单在使用JavaScript一段时间后消失。我的代码是:如何让我的子菜单在一段时间后消失?

function buildsubmenus(){ 
    for (var i=0; i<menuids.length; i++){ 
     var ultags=document.getElementById(menuids[i]).getElementsByTagName("ul") 

     for (var t=0; t<ultags.length; t++){ 
      ultags[t].parentNode.getElementsByTagName("a")[0].className="subfolderstyle" 

      if (ultags[t].parentNode.parentNode.id==menuids[i]) 
       //if this is a first level submenu 
       //dynamically position first level submenus to be width of main menu item 
      ultags[t].style.left=ultags[t].parentNode.offsetWidth+"px" 
    else 
       //else if this is a sub level submenu (ul) 
       //position menu to the right of menu item that activated it 
     ultags[t].style.left=ultags[t-1].getElementsByTagName("a")[0].offsetWidth+"px" 

      ultags[t].parentNode.onmouseover=function(){ 
       this.getElementsByTagName("ul")[0].style.display="block" 
       if(this.getElementsByTagName("a").length == '1'){ 
        this.getElementsByTagName("ul")[0].style.display="none" 
       } 
      } 

function wait(){ 
    setTimeout('times()', 5000) 
} 

ultags[t].parentNode.onmouseout=function times(){ 
    this.getElementsByTagName("ul")[0].style.display="none" 
} 
} 
    for (var t= ultags.length-1; t>-1; t--){ //loop through all sub menus again, and use "display:none" to hide menus (to prevent possible page scrollbars 
    ultags[t].style.visibility="visible" 
    ultags[t].style.display="none" 
    } 
    } 
} 

和我的功能,我想一定时间后显示为times(),但每当我做onmouse它直接调用它,它不会等待时间来算。

+3

可以使一个小题目更清晰?我认为它吓跑了可能的回答者。 – 2009-07-01 14:36:19

+1

唐纳德:我让你的问题标题更有意义,这使得你更有可能得到一个很好的答案,并有助于让你的问题(以及任何答案)对SO社区更有用。祝你好运与您的查询:) – 2009-07-01 14:49:54

回答

0

实际上,您的问题是您在调用setTimeout时没有引用正确的函数。换句话说,setTimeout参数中的函数调用是在窗口对象的上下文中执行的,而您的times()函数是在buildSubmenus对象的上下文中定义的(您可能没有意识到这一点,但是定义您等待)功能和您的时间()函数buildSubmenus的身体内意味着,wait()和时间()函数只能定义和内部buildSubmenus函数的局部范围)

我会尝试更正有效代码中的示例代码,但有太多的问题,并且缺少其他方面的内容,我认为如果我只是将您指向正确的方向,那将是最好的。在您正确实施您在问题中发布的代码之前,您需要了解并理解closurescurrying的概念。另外,如果你不想理解为什么你的例子不起作用的内部工作原理,我建议你看看一个javascript框架,它可以处理所有这些对你有用的信息,例如Prototype.js,或者是Prototype.jsjquery

1

事情是,你告诉打电话给timemouseout!

ultags[t].parentNode.onmouseout=function times(){ 
    this.getElementsByTagName("ul")[0].style.display="none" 
} 

你应该做的

var waitToDelete = function(){ 
    setTimeout(deleteList, 5000); 
} 

ultags[t].parentNode.onmouseout= waitToDelete; 

function deleteList() 
{ 
    document.getElementById("Your Menu ID").getElementsByTagName("ul")[0].style.display="none"; 
} 
相关问题