計時器函數(shù)為什么不能在js里直接用 函數(shù)名() 調(diào)用
<script type="text/javascript">
? var num=1;
? function startCount() {
? document.getElementById("count").value=num;
??? num=num+1;
??? setTimeout(startCount,1000);
? }
??? startCount();
?// setTimeout("startCount()",1000);
</script>
2016-11-15
你如果這樣子調(diào)用,需要把這段代碼放在</body>之前。就像這樣:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>計時器</title>
</head>
<body>
<form>
<input type="text" id="count" ?/>
</form>
<script type="text/javascript">
? var num=1;
? function startCount() {
? document.getElementById("count").value=num;
? ? num=num+1;
? ? setTimeout(startCount,1000);?
? }
? ? startCount();
?// setTimeout("startCount()",1000);?
</script>
</body>
</html>
具體原因:
首先,這里script位置在代碼前面,按照頁面加載順序,從上往下;
如果用?startCount(),當(dāng)加載到document.getElementById('count')這一句的時候,并不能獲取到body里面的元素(因為還沒加載到),所以會報錯;
因為如果用?setTimeout("startCount()",1000),意思延遲1秒鐘再去執(zhí)行startCount函數(shù),在這1秒鐘內(nèi),body里面的元素已經(jīng)加載完畢,再去執(zhí)行startCount函數(shù)就能夠正常執(zhí)行document.getElementById('count');
這就是原因,改進(jìn)辦法很簡單,直接將整個<script>放到</body>上方即可
2016-11-28
請問為什么要在函數(shù)外面用到setTimeout("startCount()",1000)
2016-11-20
6666