2012-10-17 177 views
0

我有這段代碼的問題:更新全局變量嵌套函數

var elements; 
var current = 100; 

$(document).ready(function() { 
     elements = = $('.slide').length; 
     iterate(); 
}); 

function iterate() { 
     $('.slide').eq(current).hide().queue(
       function() { 
         if (++current >= elements) { current = 0; } 
         $('.slide').eq(current).show(); 
         $(this).dequeue(); 
       } 
     ); 

     // Call this function again after the specified duration 
     setTimeout(iterate, 1000); 
} 

我想要做的就是重複與「滑」類的所有元素,但我有一個問題更新「當前「變量。它的值總是0.我怎樣才能從嵌套的jquery函數中修改一個全局變量?

+0

嘗試在第一線 – karancan

+0

什麼是'elements'的值刪除var關鍵字?爲什麼使用'arguments.callee'而不是'iterate'? –

+0

'console.log()'函數隊列函數中的'current'的值。 – Blender

回答

4

如果該行被調用之前DOM已準備就緒,.length0

var elements = $('.slide').length; 

這意味着該if條件永遠是true

if (++current >= elements) { current = 0; } 

您可以修復它像這個:

var elements; 
var current = 100; 

$(document).ready(function() { 
    elements = $('.slide').length; 
    iterate(); 
}); 

另外,這是一個奇怪的使用.queue()的一點點。沒有什麼需要排隊的。

我返工這樣的:

function iterate() { 
    var slide = $('.slide').eq(current).hide(); 
    if (++current >= elements) { current = 0; } 
    $('.slide').eq(current).show(); 

    // Call this function again after the specified duration 
    setTimeout(iterate, 1000); 
} 
+0

告訴海報如何解決它。AKA堅持它準備好了。 – epascarello

+0

@epascarello:剛剛更新。 - ) –

+0

@ user1689607是的,愚蠢的錯誤。我在ready函數中設置了變量,但結果是一樣的。該變量不會在嵌套函數內更新。 –