2013-10-01 56 views
0

Hej!jquery:使用其名稱的動態錨定名稱的超時值

我可能是這裏的一個笨蛋,但我無法弄清楚這一點;

我正在用javascript中的基本hover()函數構建一個水平菜單。當你離開錨點時,在懸停效果消失之前有一段短暫的時間。

所以我想要做的事情:在錨點的ID之後命名超時,其中mouseleave被觸發,以便在mouseenter上再次停止正確的超時。

上的MouseEnter我檢查哪個錨通過獲取ID徘徊,我取消此ID的超時和我的HVR-類添加到懸停錨:

var t = $(this).attr('id'); 
clearTimeout(t); 
$(this).addClass('hvr'); 

和鼠標離開我想做的事基本上這個:

$(this).attr('id') = setTimeout('doSoemthing()',66); 

但是這會導致錯誤,因爲表達式不允許在=的左邊。我想過這樣的事情:

​​

但這也行不通,因爲它只是覆蓋變量t。相反,我想要「打印」Timeout-Name變量的值。如果我使用固定的Timeout-Names,一切都像魅力一樣,但每個鏈接只有一個(相同的)超時時間,但這並不是這樣。

有沒有辦法做到這一點?或者我離開賽道?

這是完整的功能:提前

$("nav a").hover(

    function(){ 

    // On MouseEnter 
    var t = $(this).attr('id'); 
    clearTimeout(t); 
    $(this).addClass('hvr'); 

    },function(){ 

    // On MouseLeave 
    $(this).attr('id') = setTimeout(function(){doSomethingHere},66); 

    } 

); 

感謝,最好的問候。

+0

無論您將用作解決方案:請永遠不要使用字符串作爲setTimeout的第一個參數。使用函數引用,而不是'setTimeout(doSomething,66)' – devnull69

+0

感謝您指出了這一點。我在原始代碼中使用了一個函數,但想縮短它以便更好地瀏覽。可能還不夠清楚,爲此我編輯了上面的代碼以避免未來的誤解。 – lucasdidthis

回答

0

從我的理解,你需要保持基於懸停元素的超時事件的引用,你可以使用。數據()來做到這一點

我想你在找什麼是

$("nav a").hover(function() { 
    clearTimeout($(this).data('mltimer')); 
    $(this).addClass('hvr'); 
}, function() { 
    var timer = setTimeout('doSoemthing()', 66); 
    $(this).data('mltimer', timer) 
}); 
+0

這樣做,完美。根本不知道數據(),但似乎相當有用。非常感謝你! – lucasdidthis