我直接調(diào)用函數(shù)startCount()為什么不行呢?
<!DOCTYPE?HTML> <html> <head> <meta?http-equiv="Content-Type"?content="text/html;?charset=utf-8"> <title>計(jì)時(shí)器</title> </head> <script?type="text/javascript"> ??var?num=0; ??function?startCount()?{ ????document.getElementById('count').value=num; ????num=num+1; ????setTimeout("startCount()",1000)? ??} ??startCount() </script> </head> <body> <form> <input?type="text"?id="count"?/> </form> </body> </html>
代碼如上。
為什么把startCount()這句換成:setTimeout("startCount()",1000) 就可以?
后面這句代碼的目的,實(shí)際上也是為了調(diào)用函數(shù)啊。
求大神解答~
2016-12-21
js寫(xiě)在head里的話,因?yàn)閔tml文檔在加載的時(shí)候,是從上到下加載的,所以會(huì)先加載js,在js里加載到startCount()時(shí),會(huì)執(zhí)行startCount()函數(shù),但在函數(shù)里有獲取ID的document.getElementById('count'),而此時(shí)body里的內(nèi)容還沒(méi)加載,會(huì)找不到id為count的對(duì)象,所以會(huì)出錯(cuò)。setTimeout()這個(gè)函數(shù)不會(huì)截?cái)嗉虞d的進(jìn)程,而且setTimeout("startCount()",1000)會(huì)在一秒后執(zhí)行,而在這一秒內(nèi)整個(gè)文檔早就加載完成了,就不會(huì)出現(xiàn)上邊找不到的情況。所以可以成功執(zhí)行。
你把script標(biāo)簽和里面的代碼放到</body>前面,就不會(huì)出錯(cuò)了。如:
<!DOCTYPE?HTML>
<html>
<head>
<meta?http-equiv="Content-Type"?content="text/html;?charset=utf-8">
<title>計(jì)時(shí)器</title>
</head>
<body>
<form>
<input?type="text"?id="count"?/>
</form>
<script?type="text/javascript">
??var?num=0;
??function?startCount()?{
????document.getElementById('count').value=num;
????num=num+1;
????setTimeout("startCount()",1000)?
??}
??startCount()
</script>
</body>
</html>
ps:話說(shuō)你js實(shí)際上不是寫(xiě)在head里(因?yàn)樵?lt;script>標(biāo)簽前head已經(jīng)結(jié)束了),而是寫(xiě)在head和body之間了(雖然js寫(xiě)在哪兒都行)。