关于javascript中的一点疑问

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下面,代码就不会报错,为什么会这样的
代码没有加<>是因为好像加了<>这个论坛会自动执行我问题的代码

0

3个回答

你的document.getElementById('txt').value=c这行代码是在全局环境下的。
在全局环境下的代码是在页面加载阶段从上到下一边加载一边执行的,这时处于代码下面的txt元素还没有加载完,访问不到。
要把script放在页面body下面,或者把代码放到window.onload事件(页面加载完成后触发)中才可以。

不过你的document.getElementById('txt').value=c应该放到timedCount函数中吧,不然txt元素是不会实时更新的。

问答区用的编辑器是 markdown 编辑器,要使用markdown语法发帖子。
markdown语法会解析部分html标签。
要发表html代码。要用上面工具栏的第6个按钮,
或者直接输入:
```
html代码
```

0
qq_40805263
qq_40805263 感谢
10 个月之前 回复

顺序加载,放在头部的话你要改改你的代码

0
qq_40805263
qq_40805263 感谢
10 个月之前 回复

html文件是从上往下加载,当加载到document.getElementById('txt').value=c这一步的时候会报错,因为input type="text" id="txt"还没有加载到,获取不到这个标签。可以加个window.onload或者把js放到body后面

0
qq_40805263
qq_40805263 感谢
10 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!