setTimeout()不会触发该函数

时间:2011-08-22 03:21:54

标签: javascript jquery

我试图用包含不同整数的first_pic变量一次又一次地在5ooo秒内触发该函数。每次运行此函数时,它会向first_pic变量添加1,显然它不起作用,请帮忙。

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不会再次触发函数

1 个答案:

答案 0 :(得分:3)

您的first_picslide函数中的局部变量。这意味着每次调用slide时,都会获得一个新的first_pic变量。您的fadeOut回调会更新first_pic它是一个关闭,但slide调用的setTimeout将获得自己的first_pic。如果您希望在first_pic的每次执行时使用相同的slide,则必须将其设为全局,或者使用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/