<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>计时器</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>
这是因为你的js在执行时,下面的input输入框还没有生成 ,所以就报错了,你可以这样试一下,把js代码放到下面
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>计时器</title> </head> </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>
我也是对这一点有疑惑,百度了半天,没找到,回头一看这里有。
李晓健的回答很好,我这样理解:定义完成后直接调用startCount正如你所说,不正确,因为<body>部分还没有加载。所以直接调用不正确。按照这种理解,我再<input.....>后面增加了<script type="text/javascript">startCount();</script>竟然真的可以通过。
这就说明,setTimeout();函数,是第一个参数的javascript语句延迟执行,而不是该函数下面的javascript语句也停下来等待执行。仅仅是延迟一段时间执行本函数语句内第一个参数内容。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>计时器</title>
</head>
<script type="text/javascript">
var num=0;
function startCount() {
document.getElementById('count').value=num;
num=num+1;
setTimeout("startCount()",1000);
}
setTimeout("startCount()",1000);
</script>
</head>
<body>
<form>
<input type="text" id="count" />
</form>
</body>
</html>