head
script
var c=0
var t
function timedCount()
{
c=c+1
t=setTimeout("timedCount()",1000)
}
document.getElementById('txt').value=c
function stopCount()
{
clearTimeout(t)
}
/script
/head
body
form
input type="button" value="开始计时!" onClick="timedCount()"
input type="text" id="txt"
input type="button" value="停止计时!" onClick="stopCount()"
/form
p
请点击上面的“开始计时”按钮。输入框会从 0 开始一直进行计时。点击“停止计时”可停止计时。
/p
/body
我想问为什么运行上面代码时控制台会报错,但是如果把script部分移到移到body下面,代码就不会报错,为什么会这样的
代码没有加<>是因为好像加了<>这个论坛会自动执行我问题的代码
你的document.getElementById('txt').value=c这行代码是在全局环境下的。
在全局环境下的代码是在页面加载阶段从上到下一边加载一边执行的,这时处于代码下面的txt元素还没有加载完,访问不到。
要把script放在页面body下面,或者把代码放到window.onload事件(页面加载完成后触发)中才可以。
不过你的document.getElementById('txt').value=c应该放到timedCount函数中吧,不然txt元素是不会实时更新的。
问答区用的编辑器是 markdown 编辑器,要使用markdown语法发帖子。
markdown语法会解析部分html标签。
要发表html代码。要用上面工具栏的第6个按钮,
或者直接输入:
```
html代码
```
顺序加载,放在头部的话你要改改你的代码
html文件是从上往下加载,当加载到document.getElementById('txt').value=c这一步的时候会报错,因为input type="text" id="txt"还没有加载到,获取不到这个标签。可以加个window.onload或者把js放到body后面