返回信息流☆─────────────────────────────────────☆
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
这是一条镜像帖。来源:北邮人论坛 / www-technology / #9831同步于 2010/4/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
[合集] 问一段javascript的代码,关于setTimeout的
xw2423
2010/4/11镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。