2011-04-05 230 views
2
$('.toggle').toggle(function(){ 
    var ul = $('ul'); 
    ul.fadeOut('fast', function(){ 
     ul.fadeIn('fast').removeClass('off'); 
     ul.addClass('on'); 
    }); 
    }, function(){ 
    ul.fadeOut('fast', function(){ 
     alert('wtf'); // <- never gets here... 
     ul.fadeIn('fast').removeClass('on'); 
     ul.addClass('off'); 
    }); 
    }); 

我在做什麼錯?jQuery toggle()問題

我第二淡出回調函數永遠不會被執行的內部添加任何代碼...

+1

LOL。警報( '跆拳道')。我將在未來與工作相關的對話中使用它。 – 2011-04-05 02:49:07

回答

3

var ul = $('ul');也放在第二個函數中。

2

ul沒有在第二個回調定義。更改其範圍,以便兩個回調都可見。

var ul = $('ul'); 

$('.toggle').toggle(function(){ 
    ul.fadeOut('fast', function(){ 
    ul.fadeIn('fast').removeClass('off'); 
    ul.addClass('on'); 
    }); 
}, function(){ 
    ul.fadeOut('fast', function(){ 
    ul.fadeIn('fast').removeClass('on'); 
    ul.addClass('off'); 
    }); 
}); 

如果你不想做ul是在這個範圍之外,無論是的toggle()每個回調中把它包裝在一個自調用函數或指定ul

2

變量ul不存在於第二個函數的範圍內。這其實是一個不必要的優化在你的情況下,因爲下面也應該工作:

$('.toggle').toggle(function(){ 
    $('ul').fadeOut('fast', function(){ 
     $(this).fadeIn('fast').removeClass('off').addClass('on'); 
    }); 
    }, function(){ 
    $('ul').fadeOut('fast', function(){ 
     $(this).fadeIn('fast').removeClass('on').addClass('off'); 
    }); 
    }); 
+0

我同意 - 這是更清潔。 – 2011-04-05 02:50:57