Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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 clearTimeout函数在对话框打开时无法正常工作_Javascript_Jquery - Fatal编程技术网

Javascript clearTimeout函数在对话框打开时无法正常工作

Javascript clearTimeout函数在对话框打开时无法正常工作,javascript,jquery,Javascript,Jquery,这里我附上了我的代码。当对话框打开时,我清除了超时功能。但它不能正常工作。当我打开对话框时,倒计时从20开始减少,但如果我关闭并打开对话框,倒计时在20秒之间,则计时相互崩溃 function(){ var time =20; flag = false; clearTimeout(startTimer); startTimer = function(){ if(!flag){

这里我附上了我的代码。当对话框打开时,我清除了超时功能。但它不能正常工作。当我打开对话框时,倒计时从20开始减少,但如果我关闭并打开对话框,倒计时在20秒之间,则计时相互崩溃

function(){
    var time =20;
    flag = false;       
    clearTimeout(startTimer);       
    startTimer = function(){            
        if(!flag){              
            var finTime = time - 1;
            time = finTime;             
            setTimeout(startTimer,1000);                
            if(time==0){                    
                flag = true;        }               
            $("#input").text(time);             
         } else {                
             clearTimeout(startTimer,1000);                          
         } 
    };

    setTimeout(startTimer,1000);

};
我也试过这个代码

dialogOpen = function(){

    $("#dialog").dialog('open');

    startTimer();
    stopTimer();
}

startTimer = function() {

    time = 20;      
    flag = false;       
    setTimeout(startTime, 1000);
};

stopTimer = function() {

    flag = true;        
    time = 0;       
    clearTimeout(startTime);
};

startTime = function(){

    if(!flag){

        var finTime = time - 1;

        time = finTime;         

        setTimeout(startTime,1000);

        if(time==0){                
            flag = true;
        }
        $("#input").text(time);         
     } else {            
         clearTimeout(Time);                         
     } 
};

必须将
setTimeout
分配给变量

var timer;    
timer = setTimeout(startTimer,1000);
您可以通过传递变量,使用
clearTimeout
清除
setTimeout

clearTimeout(timer);
要调用
clearTimeout()
,您希望传入由
setTimeout()
返回的
intervalVariable
,而不是函数,因此它看起来像:

var intervalVariable = setTimeout(startTimer,1000);
clearTimeout(intervalVariable);
最好使用
intervalVariable
作为超时的ID,然后浏览器使用该ID取消超时


startTimer
函数之前设置一个全局变量,然后将其设置为
setTimeout()
的返回值,并在
clearTimeout()

中使用它代替
startTimer
。我将该变量设置为全局变量。将var设置为全局变量是否有任何错误?我不认为您在提供的代码中设置了全局变量。Sry,我在我的程序中提到过。这里没有提到。但是有一个名为startTimer的全局变量。非常感谢。工作正常。我应该将计时器设置为变量,而不是函数。当我一次又一次地打开对话框时,它不清除上一个超时值
clearTimeout()
没有将函数作为参数,它使用由
setTimeout()
返回的超时ID。你有没有看过?