Сбросить setTimeout

У меня проблема со сбросом 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);

}

но без результата. Я ожидаю, что когда вы нажмете, таймер снова отмерит две секунды.


person user3041764    schedule 26.01.2016    source источник
comment
Итак, с какой проблемой вы столкнулись?   -  person AsgarAli    schedule 26.01.2016
comment
timer — это локальная переменная внутри области действия вашей функции. Таким образом, при следующем клике идентификатор интервала, созданный в первом клике, будет недоступен. Вам нужно переместить переменную во внешнюю область, к которой имеют доступ оба «экземпляра» функции-обработчика.   -  person CBroe    schedule 26.01.2016


Ответы (2)


Это потому, что вы инициализируете переменную как локальную (внутри вашей функции). Это поможет:

window.clearTimeout(formMsg.timer);
formMsg.timer = window.setTimeout(....)
person Don Giusuppe    schedule 26.01.2016

переместите таймер из контекста функции следующим образом:

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);

    }
person Victor Radu    schedule 26.01.2016