2013-07-05 19 views
0

我有2個功能來顯示和清除一個窗口。最初我讓他們定義內聯jQuery的懸停命令,如在$('item').hover(function() {...}, function() {...});,這完美的作品。但是,如果我從這些函數調用中獲取代碼並將它們隔離爲像$('item').hover(function1, function2);那樣調用它,結果會有所不同。在前一種情況下,我得到了預期的行爲。也就是說,懸停時元素會顯示,如果鼠標懸停在懸停元素上,超時後淡出。在第二個版本中,新元素顯示,在超時後淡出,並且不會再回到懸停狀態。爲什麼用產生不同行爲的函數調用替換Javascript內聯函數?

我假設它與我正在使用的超時有關,但我完全從原始複製函數,因此理論上它應該是發生的相同的東西..所以我會天真地假設。無論是我還是在某個地方犯了一個錯誤,我只是沒有抓住。

撥弄全代碼和HTML可here(工作版本)和here(斷版)。

下面是該工程的一個代碼:

$('#test').hide(); 
var timeout; 

$('a').hover(function(){ 
    $('#test').show(); 
    clearTimeout(timeout); 
}, function(){ 
    timeout = setTimeout(function(){ 
     $('#test').fadeOut('fast', function(){}); 
    }, 1000); 
}); 

這裏就是失敗:

$('#test').hide(); 
var timeout; 

function clearWindow() { 
    timeout = setTimeout(function(){ 
     $('#test').fadeOut('fast', function(){}); 
    }, 1000); 
} 

function showWindow() { 
    $('#test').show(); 
    clearTimeout(timeout); 
} 

$('a').hover(showWindow(), clearWindow()); 

回答

3

傳遞功能.hover()時刪除括號。

$('a').hover(showWindow, clearWindow); 

括號調用的功能,這意味着你傳遞通過調用showWindow()/clearWindow(),而不是函數本身返回值。

3

您所呼叫的功能,當您打算將它們傳遞:

$('a').hover(showWindow(), clearWindow()); 
         ^^    ^^ 

使用此替代(你想傳遞函數本身,而不是(undefined)值他們返回):

$('a').hover(showWindow, clearWindow); 

注意,在一般情況下,它是可能有已被移動到一個不同的功能代碼表現不同,因爲它可能會引用不同的一組上下文變量的(即在不同的範圍比它瓦特如原來那樣)。但是,這不適用於您在這裏的功能。

+0

再一次我覺得很愚蠢..雖然鬆了一口氣,但它很簡單,謝謝 – ssb

+0

@ssb:不用擔心,至少它是簡單和容易修復的:-) – Cameron

相關問題