2009-07-01 41 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"; 
} 
相關問題