重置setTimeout

时间:2016-01-26 11:13:50

标签: javascript settimeout cleartimeout

我有重置setTimeout的问题。我尝试使用clearTimeout()

function formMsg(text){

    if (text == "success"){
        $( ".alert-msg" ).removeClass( "hidden alert-danger" ).addClass( "alert-success" );
        $( ".alert-success .msg" ).html( "<b>Well done!</b> You successfully added order." );
    } else {
        $( ".alert-msg" ).removeClass( "hidden alert-success" ).addClass( "alert-danger" );
        $( ".alert-danger .msg" ).html( "<b>F***!</b> Something went wrong." );
    }

    window.clearTimeout(timer);

    var timer = window.setTimeout(function()
                {
                    $(".alert-msg").fadeOut("slow", function() {
                        $(this).addClass('hidden').show(0);
                    });
                }, 2000);

}

但没有结果。我希望当你点击时,计时器再次测量了两秒钟。

2 个答案:

答案 0 :(得分:2)

这是因为您将变量初始化为local(在函数内)。 这样就可以了:

window.clearTimeout(formMsg.timer);
formMsg.timer = window.setTimeout(....)

答案 1 :(得分:0)

将定时器移出函数上下文,如下所示:

var timer = null; //initialize    

function formMsg(text){

        if (text == "success"){
            $( ".alert-msg" ).removeClass( "hidden alert-danger" ).addClass( "alert-success" );
            $( ".alert-success .msg" ).html( "<b>Well done!</b> You successfully added order." );
        } else {
            $( ".alert-msg" ).removeClass( "hidden alert-success" ).addClass( "alert-danger" );
            $( ".alert-danger .msg" ).html( "<b>F***!</b> Something went wrong." );
        }

        if(timer !== null)
        window.clearTimeout(timer);

        var timer = window.setTimeout(function()
                    {
                        $(".alert-msg").fadeOut("slow", function() {
                            $(this).addClass('hidden').show(0);
                        });
                    }, 2000);

    }