鍍金池/ 問答/數(shù)據(jù)庫(kù)  網(wǎng)絡(luò)安全/ setInterval多次點(diǎn)擊后無法停止

setInterval多次點(diǎn)擊后無法停止

單次點(diǎn)擊開始時(shí)鐘,程序正常運(yùn)行,點(diǎn)擊停止時(shí)鐘,時(shí)鐘立刻停止;多次點(diǎn)擊開始時(shí)鐘后,程序運(yùn)行,點(diǎn)擊停止時(shí)鐘,程序有響應(yīng),但是時(shí)鐘未停止。請(qǐng)問這是什么情況?

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<p>頁(yè)面上顯示時(shí)鐘:</p>
<p id="demo"></p>
<button id='myStopFunction'>停止時(shí)鐘</button>
<button onclick="mvToLft()">開始時(shí)鐘</button>
<script>
function mvToLft(){
    var myVar=setInterval(function(){myTimer()},1000);
    document.getElementById('myStopFunction').onclick = function(){
        clearInterval(myVar);
        console.log(1);
    };
}
function myTimer(){
    console.log(0);
    var d=new Date();
    var t=d.toLocaleTimeString();
    document.getElementById("demo").innerHTML=t;
}
</script>
</body>
</html>
回答
編輯回答
伴謊

// 你寫的 代碼太萌, 看看這符合要求嗎, 建議 看一下 函數(shù) 閉包 和 setInterval (返回的是 數(shù)字id),
多次執(zhí)行 開始 setInterval 會(huì)多次調(diào)用, 造成 myVar 只保留最后一次 setInterval 返回的id, 最終造成調(diào)用clear函數(shù),只清楚除最后一次。
然而還有其他執(zhí)行的 setInterval 隊(duì)列。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<p>頁(yè)面上顯示時(shí)鐘:</p>
<p id="demo"></p>
<button id='myStopFunction'>停止時(shí)鐘</button>
<button onclick="mvToLft()">開始時(shí)鐘</button>
<script>
var myVar = null
function mvToLft(){
    myVar !== null && clearInterval(myVar)
    myVar = setInterval(function(){myTimer()},1000);
    document.getElementById('myStopFunction').onclick = function(){
        clearInterval(myVar);
    };
}
function myTimer(){
    console.log(0);
    var d=new Date();
    var t=d.toLocaleTimeString();
    document.getElementById("demo").innerHTML=t;
}
</script>
</body>
</html>
2017年12月31日 15:33
編輯回答
使勁操

你點(diǎn)一次,開始一個(gè)時(shí)鐘,點(diǎn)兩次,又加一個(gè),最后,你停止的時(shí)候,只把最后一個(gè)給停了,其他的還在進(jìn)行中

2017年11月29日 02:19
編輯回答
涼薄

多次點(diǎn)擊開始時(shí)鐘后,就往隊(duì)列里面放入了多個(gè)定時(shí)任務(wù),
一次點(diǎn)擊停止時(shí)鐘,對(duì)應(yīng)一個(gè)任務(wù),其他回調(diào)還是會(huì)在滿足時(shí)間間隔后繼續(xù)執(zhí)行

2018年3月22日 14:50
編輯回答
糖果果

怎么不使用settimeOut呢?

2017年5月20日 04:31
編輯回答
醉淸風(fēng)

點(diǎn)擊開始時(shí)鐘的時(shí)候,你得先清掉已開的定時(shí)器啊,不然你多個(gè)定時(shí)器同時(shí)跑,當(dāng)然會(huì)有問題

2017年12月7日 12:35