为了账号安全,请及时绑定邮箱和手机立即绑定

关于document.getElementById("clock").value = time

下段代码不能使文本框显示出当前电脑时间,报错Cannot set property 'value' of null。为什么像课程例子那样调用函数(把setInterval换成setTimeout)就没问题?(大概意思是都把js写在前面,为何一个会报错,一个不会)

<head>

<script type="text/javascript">

    var time=new Date();                

    document.getElementById("clock").value = time;

</script>

</head>

<body>

  <form>

    <input type="text" id="clock" size="50"  />

  </form>

</body>


正在回答

2 回答

setInterval会先调用一次函数吧,调用函数的时候,body中input元素还没加载到,所以Cannot set property 'value' of null不能为一个不存在的元素赋值,  setTimeout是停一段时间以后才会调用函数,此时input元素已经存在.  我觉得是这样的 

0 回复 有任何疑惑可以回复我~
#1

hong03223376190 提问者

setInterval没报错。。下面那段码因为没加载到所以报错,不明白的是为何setInterval和 setTimeout不会报错。。
2018-04-25 回复 有任何疑惑可以回复我~
#2

hong03223376190 提问者

额。。可能是你说的停一段时间才调用函数。。谢谢
2018-04-25 回复 有任何疑惑可以回复我~
#3

等待彼_岸 回复 hong03223376190 提问者

不好意思,我理解错了,这个应该和setInterval与setTimeOut是异步执行的有关.
2018-04-25 回复 有任何疑惑可以回复我~
#4

hong03223376190 提问者 回复 等待彼_岸

这么一说又不明白了。。可以解释下吗
2018-04-26 回复 有任何疑惑可以回复我~
#5

等待彼_岸 回复 hong03223376190 提问者

异步是浏览器在下载执行js代码的同时,还会继续对页面进行加载.因为setInterval和setTimeOut是异步的,所以在setInterval和setTimeOut调用函数的时候页面可能已经加载完毕了.如果没有setInterval或setTimeOut,js代码那块是同步执行,也就是js代码执行完才会继续加载页面,这样在js代码执行的时候页面没有加载完成,所以会报错
2018-04-26 回复 有任何疑惑可以回复我~
#6

hong03223376190 提问者 回复 等待彼_岸

非常感谢
2018-04-26 回复 有任何疑惑可以回复我~
查看3条回复

这么厉害的代码,我还没看懂,让我好好明白一下意思先,一会回来告诉你。

0 回复 有任何疑惑可以回复我~
#1

hong03223376190 提问者

好的,谢谢
2018-04-25 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于document.getElementById("clock").value = time

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信