BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #9831同步于 2010/4/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

[合集] 问一段javascript的代码,关于setTimeout的

xw2423
2010/4/11镜像同步2 回复
☆─────────────────────────────────────☆ linandmin (吃饭是人生第一大事 ---《星星语录》) 于 (Mon Apr 27 17:28:39 2009) 提到: 我想做出一个显示不断跳动的电子时钟的页面,用了两种方法来实现。方法一用innerHTML来显示,方法二用document.write()不断地把一个ban变量写到页面上来实现。但方法二失败。 其中setTimeout(code, interval)这个函数,在每隔interval毫秒后调用code这个函数。我设想,每次调用startTime()时,h,m,s这三个变量都会变化,但用方案二,每次出现的时间值都是一样的,为什么? <html> <head> <script type="text/javascript"> var i=0; function startTime() { var today=new Date() var h=today.getHours() //小时 var m=today.getMinutes() //分钟 var s=today.getSeconds() //秒 //document.getElementById('txt').innerHTML=h+":"+m+":"+s //用来显示电子时钟的方案一,成功 ban=h+":"+m+":"+s; document.write(ban+"<br>"); //用来显示电子时钟的方案二,失败 document.write(i); i=i+1; t=setTimeout('startTime()',500) } </script> </head> <body onload="startTime()"> <div id="txt"></div> </body> </html> ☆─────────────────────────────────────☆ BookMoth (书中蠹鱼) 于 (Mon Apr 27 17:42:34 2009) 提到: 因为你document.write的时候,把页面上的东西都写没了。回调函数,页面结构,通通没有了。 ☆─────────────────────────────────────☆ linandmin (吃饭是人生第一大事 ---《星星语录》) 于 (Mon Apr 27 18:08:08 2009) 提到: 我还是不大理解。 第一次调用startTime()时,ban得到了第一次调用时的时间,document.write把它写到页面上了;第二次调用startTime()时,ban得到了第二次调用时的时间,document.write就会把新的时间写到页面上,覆盖原来的时间。这是我的理解,不知道错在哪里? 还有,为什么用innerHTML就不会出现第二种方案的出错现象呢? ☆─────────────────────────────────────☆ BookMoth (书中蠹鱼) 于 (Mon Apr 27 21:50:33 2009) 提到: 在页面加载完成之后,触发了onload事件,调用startTime方法,这时候document.write写了时间到页面上。 其实这时的document上面,已经没有了<div id=‘txt’>,<script>等等。所以startTime()函数也消失了,页面没有这个函数了,页面上只剩下你写的时间了。等于document.write破坏了页面的DOM结构。所以startTime()不会被执行第二次。 当你使用innerHTML的时候,页面的结构没有被破坏,只是更改了一个节点的子节点。<script>也还在,脚本才可以正确执行。 【 在 linandmin 的大作中提到: 】 : 我还是不大理解。 : 第一次调用startTime()时,ban得到了第一次调用时的时间,document.write把它写到页面上了;第二次调用startTime()时,ban得到了第二次调用时的时间,document.write就会把新的时间写到页面上,覆盖原来的时间。这是我的理解,不知道错在哪里? : 还有,为什么用innerHTML就不会出现第二种方案的出错现象呢? ☆─────────────────────────────────────☆ linandmin (吃饭是人生第一大事 ---《星星语录》) 于 (Tue Apr 28 10:20:28 2009) 提到: 概念顿时清楚了,茅塞顿开啊 ☆─────────────────────────────────────☆ pmps (把它放哪儿?) 于 (Tue Apr 28 13:01:30 2009) 提到: 慎用document.write
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
mumubin机器人#1 · 2013/9/13
document.write()这个让我头疼了一下午,还是学校论坛给力!!!
kxj机器人#2 · 2013/9/16
赞 之前都不知道write会重写DOM