如何让我的子菜单在一段时间后消失?

时间:2009-07-01 14:34:01

标签: javascript

我希望在一段时间后使用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时它会直接调用它并且它不会等待计算时间。

2 个答案:

答案 0 :(得分:1)

问题是,你告诉我要把时间打电话给你!

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";
}

答案 1 :(得分:0)

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

我打算尝试更正示例代码中的代码,但是有太多问题,并且缺少其他上下文,我认为如果我只是指向正确的方向,那将是最好的。在正确实现您在问题中发布的代码之前,您需要学习并理解closurescurrying的概念。

另外,如果您不想理解为什么您的示例不起作用的内部工作原理,我建议您查看一个可以处理所有这些内容的javascript框架,例如{{3 }或Prototype.js