-1

ここに私のコードを添付しました。ダイアログが開いているときのタイムアウト機能をクリアしていますが、正しく機能していません。ダイアログを開くとカウントダウンが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);                         
     } 
};
4

2 に答える 2

1

setTimeout変数に代入する必要があります

var timer;    
timer = setTimeout(startTimer,1000);

変数を渡すことでsetTimeout使用をクリアできます。clearTimeout

clearTimeout(timer);
于 2012-11-03T03:46:18.043 に答える
1

を呼び出すには、関数ではなく、によって返されclearTimeout()た を渡したいので、次のようになります。intervalVariablesetTimeout()

var intervalVariable = setTimeout(startTimer,1000);
clearTimeout(intervalVariable);

intervalVariableブラウザがタイムアウトをキャンセルするために使用するタイムアウトの ID として考えることをお勧めします。

関数の前にグローバル変数startTimerを設定し、それを return に設定しsetTimeout()て in の代わりに使用startTimerclearTimeout()ます。

于 2012-11-03T03:47:08.797 に答える