关于setTimeout

[code="java"]

document.write("<h1>Hello World!</h1>") document.write("<h1>Hello World!11</h1>") setTimeout("write1()","0"); function write1() { document.write("<h1>Hello World!22</h1>"); }



[/code]
为什么write1里边的document.write("

Hello World!22

");
会覆盖之前的document.write呢,而且显示的Hello World!22是粗体的,这时为什么呢 :oops:
[b]问题补充:[/b]
[code="java"]

document.write("<div>111</div>"); document.write("<div>222</div>");



[/code]
这段代码的显示结果是:
111
222
[code="java"]

document.write("<div>111</div>"); document.write("<div>222</div>");



[/code]

[b]问题补充:[/b]
[code="java"]

document.write("<div>111</div>"); document.write("<div>222</div>"); setTimeout("write1()","0"); function write1() { document.write("<h1>333</h1>"); }



[/code]这段代码执行的结果是333,并且333的字体和111,222的字体不一样,
[b]问题补充:[/b]
按楼下几位所说,[quote]document.write("

111
");

document.write("
222
");[/quote]是不是应该只显示222? ,但实际上不是。
[b]问题补充:[/b]
lovewhzlq和lt0604 的回答现在明白了(更具体的解释在JavaScript权威指南中文版第五版的303页,15.1动态文档的内容), “在载人页面后,浏览器输出流自动关闭;在此之后,任何一个对当前页面进行操作的document.write()方法将打开—个新的输出流。”和“setTimeout的缘故,产生了异步行为,故覆盖了原来的 ”是一个意思呵呵,:D ,不过延时的document.write的字体为什么是粗的呢? :shock: :D
[b]问题补充:[/b]
[code="java"]document.write("
111
");

document.write("
222
");[/code]
div :roll:
[b]问题补充:[/b]
[code="java"]

document.write("<div>111</div>"); document.write("<div>222</div>"); setTimeout("write1()","0"); function write1() { [b]document.write("<div>333</div>");[/b] }



[/code]
用这段代码试下,333是粗体的~ :shock: :D
[b]问题补充:[/b]
:!: :!: :!: :!: :!: 分割线 :!: :!: :!: :!: :!:
说明一下:
关[b]于document.write()方法还有一点要说明的是它的相关方法document.close()。脚本向窗口(不管是本窗口或其他窗口)写完内容后.必须关闭输出流。在延时脚本的最后一个document.write()方法后面.必须确保含有document.close()方法,不这样做就不能显示图片和表单。[/b]这个解释有误。
刚看了JavaScript权威指南,document.write一般有两种用法,1.一种是在文档加载的时候,用于想文档写入内容,2.一种用于在另一个窗口中(比如弹出窗口)写入文档。用第二种方法的例子:【注:一下内容来自于JavaScript权威指南第五版】[code="java"]function test() {
var w = window.open();
var d = w.document;
d.open();
d.write("111");
d.close();
}[/code]
这里因为调用了documetn.open()方法,所以当在文档中的内容写完后,必须要调document.close();,用来说明文档装载完毕,否则,浏览器就不能制止他所显示的文档装在动画。
[b]问题补充:[/b]
我加那个[b]主要就是想让代码粗体显示,就这段代码[code="java"]

document.write("<div>111</div>"); document.write("<div>222</div>"); setTimeout("write1()","0"); function write1() { document.write("<div>333</div>"); }



[/code]为什么333是粗体的,
[b]问题补充:[/b]
不是很粗那种粗体,可以试一下[code="java"]

document.write("<div>111</div>");



[/code]和[code="java"]

setTimeout("write1()","0"); function write1() { document.write("<div>111</div>"); }



[/code]这两段代码的输出字体不一样
[b]问题补充:[/b]
“不要说我现实,一个问题一个问题收钱”我才30分 :shock: ,5分都是大出血了! :shock: :shock: :shock:
[b]问题补充:[/b]
我这显示的不一样,正常的document.write字体比延迟的细一些,ie8,ff下试的
[b]问题补充:[/b]
结贴了,,字体的问题没啥大不了了,不过就是不清楚为什么字体不一样而已了想弄明白。 :!: :!: :!:

23个回答

不敢同意上面两位的说话。

个人认识是setTimeout的缘故,产生了异步行为,故覆盖了原来的

  在载人页面后,浏览器输出流自动关闭;在此之后,任何一个对当前页面进行操作的document.write()方法将打开—个新的输出流。它将清除当前页面内容(包括源文档的任何变量或值)、因此.假如希望用脚本生成的HTML替换当前页面,就必须把HTML内容连接起来赋给一个变量、使用一个document.write()方法完成写操作,不必清除文档并打开一个新数据流,一个document.write()调用就可完成所有的操作。 
   关于document.write()方法还有一点要说明的是它的相关方法document.close()。脚本向窗口(不管是本窗口或其他窗口)写完内容后.必须关闭输出流。在延时脚本的最后一个document.write()方法后面.必须确保含有document.close()方法,不这样做就不能显示图片和表单。并且,任何后面调用的document.write()方法只会把内容追加到页面后,而不会清除现有内容来写入新值。

[quote]为什么write1里边的document.write("

Hello World!22

");
会覆盖之前的document.write呢,而且显示的Hello World!22是粗体的,这时为什么呢 [/quote]
document是对整个页面进行重新写入..当然会覆盖了..
而Hello World!22是粗体的
正确的来说...h1是标题标签..该标签会将字体变成粗体字,并且会自成一行。

简单的理解可以使这样,setTimeout()里的方法是在整个页面onload后调用的。

document.write本来就是这样啊,重写整个文档.

innerHTML设置对应元素的HTML代码

[code="java"]

document.write("<div>111</div>"); document.write("<div>222</div>"); setTimeout("write1()","0"); function write1() { document.write("<h1>333</h1>"); }



[/code]
[quote]这段代码执行的结果是333,并且333的字体和111,222的字体不一样,[/quote]
我显示的字体还是粗体啊..有啥不一样...,
另外setTimeout()..只是定时,并不刷新页面...
document才是对整个页面进行重新载入..

这段代码执行的结果是333,并且333的字体和111,222的字体不一样,

111

333

一个是DIV 一个是 h1肯定不一个啊



document.write("<div>111</div>"); document.write("<div>222</div>"); setTimeout("write1()","0"); function write1() { document.write("<h1>333</h1>"); }



[quote]按楼下几位所说,
引用
document.write("

111
");

document.write("
222
");
是不是应该只显示222? ,但实际上不是。[/quote]
可能我的理解也有错误..
我觉得这里显示111,222是可能是因为..document在未进行外在条件触发的时候,write还是当前文档..
如果进行外在触发则打开新的文档...
而setTimeout 或鼠标点击事件等...都会产生外在触发..
至于字体问题..我前面已经提过..h1是字体标签..该标签会将字体变成粗体字,并且会自成一行。

而div标签不是字体标签..而是相当于block(块)的标签,相对span 来说..

你们都没有弄清楚setTimeout的定义是什么:
setTimeout是在文档(即document)[color=red]完全载入后[/color],延迟执行设置的方法。
文档被完全载入后document.write输出流被关闭,再调用==新创建,所以覆盖。
在文档为完全载入,document.write使用的是一个输出流。

[quote="lt0604"]
不敢同意上面两位的说话。

个人认识是setTimeout的缘故,产生了异步行为,故覆盖了原来的
lt0604 (初级程序员) 2009-07-23 举报作弊
简单的理解可以使这样,setTimeout()里的方法是在整个页面onload后调用的。
lt0604 (初级程序员) 2009-07-23 举报作弊
[/quote]

不知道是你们理解有问题还是我表达有问题,或者你们已经陷入了迷途不能自拔?

共23条数据 1 3 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问