2011-10-10 59 views
0

問題我試圖建立與子導航下拉列表一個簡單的導航。如果鼠標未輸入,下拉菜單會在一定時間後隱藏自己的功能。雖然如果它目前被徘徊,我想清除Timeout,以便在鼠標位於其中時不會隱藏。與clearTimeout

function hideNav() { 
     $('.subnav').hover(function(){ 
      clearTimeout(t); 
     }, function() { 
      $(this).hide(); 
     }); 
} 

$('#nav li').mouseover(function() { 
    t = setTimeout(function() { $('.active').hide()}, 4000); 
    //var liTarget = $(this).attr('id'); 
    $('.active').hide(); 
    $('.subnav', this).show().addClass('active'); 
    navTimer; 
    hideNav(); 
}); 

我在想什麼?我通過手柄錯了嗎?

+0

究竟有什麼問題? –

+0

也許你的計時器變量的範圍不是正確的?它存在嗎?試試像這樣:window.timer = setTimeout ....和clearTimeout(window.timer) –

+0

What @MichaelKoper said - you need to make make't' a global variable。現在它是本地的你的匿名鼠標懸停功能。 – Blazemonger

回答

0

你也應該清除超時在鼠標懸停,設置新的超時之前。
否則之前啓動的超時仍然有效,但不能再通過t變量訪問。

-1

嘗試做推薦的方式(JS語句作爲字符串):

t = setTimeout("$('.active').hide()", 4000); 
+0

使用皺眉的'eval'。 –

+0

這很好理解。 W3C不提供任何函數()示例,所以我認爲這是首選方法。爲了學習新的東西,我想我會採取「冷靜」的態度。 ;-) –

0

可以使定時器變量全球。

function hideNav() { 
    $('.subnav').hover(function(){ 
    clearTimeout(window.t); 
    } 
} 

$('#nav li').mouseover(function() { 
    window.t = setTimeout(function() { $('.active').hide()}, 4000); 
});