Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重置设置超时_Javascript_Settimeout_Cleartimeout - Fatal编程技术网

Javascript 重置设置超时

Javascript 重置设置超时,javascript,settimeout,cleartimeout,Javascript,Settimeout,Cleartimeout,我对重置设置超时有问题。我试过使用: 函数formMsg(文本){ 如果(文本=“成功”){ $(“.alert msg”).removeClass(“隐藏的警报危险”).addClass(“警报成功”); $(“.alert success.msg”).html(“干得好!您成功添加了订单。”); }否则{ $(“.alert msg”).removeClass(“隐藏警报成功”).addClass(“警报危险”); $(“.alert danger.msg”).html(“F***!出了点问

我对重置设置超时有问题。我试过使用:

函数formMsg(文本){
如果(文本=“成功”){
$(“.alert msg”).removeClass(“隐藏的警报危险”).addClass(“警报成功”);
$(“.alert success.msg”).html(“干得好!您成功添加了订单。”);
}否则{
$(“.alert msg”).removeClass(“隐藏警报成功”).addClass(“警报危险”);
$(“.alert danger.msg”).html(“F***!出了点问题。”);
}
清除超时(计时器);
var timer=window.setTimeout(函数()
{
$(“.alert msg”).fadeOut(“慢速”,函数(){
$(this.addClass('hidden').show(0);
});
}, 2000);
}

但是没有结果。我希望当您单击时,计时器再次测量两秒。

这是因为您将变量初始化为本地变量(在函数内部)。 这将实现以下目的:

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

这是因为您将变量初始化为局部变量(在函数内部)。 这将实现以下目的:

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

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

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

    }
var定时器=null//初始化
函数formMsg(文本){
如果(文本=“成功”){
$(“.alert msg”).removeClass(“隐藏的警报危险”).addClass(“警报成功”);
$(“.alert success.msg”).html(“干得好!您成功添加了订单。”);
}否则{
$(“.alert msg”).removeClass(“隐藏警报成功”).addClass(“警报危险”);
$(“.alert danger.msg”).html(“F***!出了点问题。”);
}
如果(计时器!==null)
清除超时(计时器);
var timer=window.setTimeout(函数()
{
$(“.alert msg”).fadeOut(“慢速”,函数(){
$(this.addClass('hidden').show(0);
});
}, 2000);
}

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

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

    }
var定时器=null//初始化
函数formMsg(文本){
如果(文本=“成功”){
$(“.alert msg”).removeClass(“隐藏的警报危险”).addClass(“警报成功”);
$(“.alert success.msg”).html(“干得好!您成功添加了订单。”);
}否则{
$(“.alert msg”).removeClass(“隐藏警报成功”).addClass(“警报危险”);
$(“.alert danger.msg”).html(“F***!出了点问题。”);
}
如果(计时器!==null)
清除超时(计时器);
var timer=window.setTimeout(函数()
{
$(“.alert msg”).fadeOut(“慢速”,函数(){
$(this.addClass('hidden').show(0);
});
}, 2000);
}

那么您面临的问题是什么呢?
timer
是函数范围内的一个局部变量。因此,下次单击时,第一次单击中创建的间隔标识符将不可用。您需要将变量移动到处理函数的两个“实例”都可以访问的外部作用域。那么您面临的问题是什么?
timer
是函数作用域内的局部变量。因此,下次单击时,第一次单击中创建的间隔标识符将不可用。您需要将变量移动到外部作用域,处理函数的两个“实例”都可以访问该作用域。