2011-08-22 131 views
-1

我試圖在5ooo秒內一次又一次地用包含不同整數的first_pic變量觸發函數。每次這個函數運行時,它都會給first_pic變量加1,顯然它不起作用,請幫忙。setTimeout()不會觸發函數

function slide(){ 
    var total_pic = $("#slide_show").children().length; 
    var first_pic = $("#slide_show li:first-child").css('z-index',total_pic).index()+1; 
    $("#slide_show li:nth-child("+first_pic+")").fadeOut(4000, function(){ 
     first_pic = first_pic + 1; 
    }); 
    setTimeout(slide, 5000); 
}; 
slide(); 

變量加1好聽,但setTimeout的不觸發功能再次

+0

FYI,5000秒是5000000毫秒(這是'setTimeout()'中使用的單位)。當然,你可能意思是毫秒,因爲5000秒(〜1.3小時)是等待瀏覽器事件的很長時間 – Phil

+4

那麼如何使用'setInterval()'來延遲重複? –

+0

唯一真正的區別是,使用setTimeout,你可以立即啓動函數,然後每隔一段時間再次啓動,其中setInterval首先給你間隔延遲,然後觸發函數 – rlemon

回答

3

first_picslide函數內的局部變量。這意味着每次您撥打slide時,都會得到一個新的first_pic變量。你的fadeOut回調將更新first_pic,它是封閉的,但slide調用setTimeout將得到它自己的first_pic。如果您想爲slide的每次執行使用相同的first_pic,則必須將其設置爲全局或使其值爲data或cookie。

看一看這一點,它可能會澄清這回事:

function slide() { 
    var first_pic = 5; 
    $('#fade').fadeOut(1000, function() { 
     first_pic = first_pic + 1; 
     $('#fade').show(); 
     $('#out').text(first_pic); 
    }); 
    setTimeout(slide, 2000); 
}; 
slide(); 

現場版(帶HTML):http://jsfiddle.net/ambiguous/PRaLH/

和比較,這是如何表現:

var first_pic = 5; 
function slide() { 
    $('#fade').fadeOut(1000, function() { 
     first_pic = first_pic + 1; 
     $('#fade').show(); 
     $('#out').text(first_pic); 
    }); 
    setTimeout(slide, 2000); 
}; 
slide(); 

現場版:http://jsfiddle.net/ambiguous/Ntqjh/

+0

太傻我... 我做了變量全局,推動他們出功能,現在它的工作。 – Remir

+0

感謝人和你們所有人的幫助 – Remir