关于doucument.write与window.onload 本帖最后由 arrowwhite 于 2011-05-24 18:15:28 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你知道window.onload的含义吗?它是指:代码中的DOM已经加载就绪了,也就是文档流已经关闭。此时,你再用document.write()是启用了新的文档流来render浏览器窗口内容,从而把前面的全部内容通通覆盖掉(就是你说的“<p>html标签</p>会无法加载”--不是无法加载,是被你document.write()覆盖了)。 你用firebug查看下html结构就知道了 第一个问题 你页面载入以后执行 document.write()方法 把整张html给清空了记住 最好不要在 function中用 document.write() 如果非要使用 可以用 obj.innerHTML代替, 应该在页面上下文加载的时候 直接使用 document.write() 问二楼 那为什么window.onload=pri()就可以显示<p>html标签</p>?window.onload=pri()与window.onload=pri 语句解释有什么不同问三楼 那关于假如在function 中使用document.write(),为什么使用window.onload=pri时,通过id获得不了外联的css样式,必须要通过style定义 window.onload=pri()与window.onload=pri 语句解释有什么不同window.onload=pri()window.onload=pri()是一个运算符 当他在 function对象后面时 表示 执行该function有() 则返回该函数运行后的值 没有() 则直接表示该函数window.onload=XXX表示 window对象的 onload的时候 执行 XXX()一般浏览器在页面所有元素加载完毕后 调用 onload 事件 所以总结一下,window.onload后执行执行document.write(),他就等于把页面中的内容清空了,包括<head><body>中的内容,所以此时我通过id拿不到外联的<head>中的css样式对不对?我这么理解对不对?那为什么,window.onload=pri()内的document.write()不会清空html页面???? document.write只有在加载时执行才不会清空页面内容,其他时间执行则会清空页面内容。?? 对的,必须要在document加载完成之前 你8楼的总结还是标,不是本。你对DOM以及BOM的概念还很模糊-------------------------------------------------------------------1、document.write()是一个向窗口写入内容的文件流,这个相信你已经明白。关键是下面;2、window.onload : window: 浏览器的窗体对象。就是你用浏览器打开一个空白网页的时候,那白花花一片的窗口; onload:它是一个事件,意指一些DOM元素(不是全部)的加载完成事件。例如window,iframe,image等。3、事件是要绑定以后才会起作用的。可以在JS代码中绑定,也可以直接在控件元素里绑定;但是写法不同,你恰恰就模糊在这个地方,如:1)<script>function pri(){document.write("<div id='apDiv1' style='position:absolute;width:200px;height:115px;z-index:2;left: 538px;top: 56px;' >"+"dsf"+"</div>")}window.onload=function(){ pri();}</script>-------------2)<script>function pri(){document.write("<div id='apDiv1' style='position:absolute;width:200px;height:115px;z-index:2;left: 538px;top: 56px;' >"+"dsf"+"</div>")}</script><body onload="pri()">...............</body>这两种方式绑定之后,才能有页面全部内容加载完成后触发事件的可能。否则会报错而不执行你的函数。如:<script>function pri(){document.write("<div id='apDiv1' style='position:absolute;width:200px;height:115px;z-index:2;left: 538px;top: 56px;' >"+"dsf"+"</div>")}window.onload=pri()//报错} 更正一下:9楼一部分内容不确切:这两种方式绑定之后,才能有页面全部内容加载完成后触发事件的可能。否则会报错而不执行你的函数。如:<script>function pri(){document.write("<div id='apDiv1' style='position:absolute;width:200px;height:115px;z-index:2;left: 538px;top: 56px;' >"+"dsf"+"</div>")}window.onload=pri()//报错}-------------------------------应该是:这样绑定onload事件是错误的,它并不是等到页面加载完毕后才触发,而仅仅起到在文档加载中调用一个普通的函数pri()那样的作用,所以页面并未被清除,而仅仅是添加内容或修正内容。但是还是会报错。例:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>onload与document.write</title><style type="text/css">#apDiv1 {position:absolute;width:200px;height:115px;z-index:2;left: 538px;top: 56px;border: 10px solid #F00;/*此样式定义了边框*/}</style></head><body><div id="apDiv1"></div><p> <img src='http://avatar.profile.csdn.net/6/F/F/2_arrowwhite.jpg' onload="alert('image loaded')"></p><script type="text/javascript">function pri(){ document.write("<div id='apDiv1' style='position:absolute;border:1px dashed blue' >yyyyyyyyyyyy</div>")}try{ window.onload=pri() }catch(e){alert(e.message)}//使用下面的方法,就会清空页面,重新写入://window.onload=function(){alert('window loaded! ');pri();}</script></body></html> write 方法用于向文档流中写入内容。当文档在加载的时候,文档流是可写的,所以就不用调用open(),close()方法来打开和关闭输出流。当文档加载完毕过后,文档流是不可写的,要write内容就得先打开输出流,通过调用open()打开,这个open()方法则会清除当前文档(通常open()方法会在调用write时自动调用)。所以第一个问题:不是<p>html标签</p>无法加载,是清除了;同样的样式也清除了,当然你也得不head里的样式。第二个问题:文档从上而上加载渲染,当遇到window.onload=pri(),此时前面的样式、<p>..</p>等都分析完成。这时就要解析这句话window.onload=pri()。要往window.onload事件上绑定一个函数,而=号的右边又不是一个函数而是一个函数的返回值。所以就得先执行这个数据,得到返回值,再绑定给window.onload。执行pri(),把write里的东西写到文档里,由于这时文档还是处于加载渲染的阶段,所以不会清除当前文档,而是加文档里加入内容,你加入的div和原来body里的div叠在一起了。这时pri()执行完了,而window.onload还期待pri()返回一个绑定函数,pri()没有明确的返回语句也就默认返回undefined,而undefined和window.onload的绑定类型不对,所以会报错。 至于你的样式,你用write写的div会用自己的style里的样式和#apDiv1里的样式一起计算,得到最后的样式。你两个div最后计算出来的样式都一样,所你看不出来差异(你可以试着把style里的width减小就会看出来)。style属性只能取得内联里的样式结果,要得到<style></style>里的和外部样式(准确的说是计算样式),得用另外的东西currentStyel、getComputedStyle。至于为什么,东西太多这里就不说了 window.open() ff javaxcript中如何声明一个全局变量呀,var声明的是全局的。还有:全局变量的作用域是什么? 为虾米DIV不出来? 如何使页面同时响应两个OnLoad事件啊? 請問reset可以保留hidden的值不? 急求一段javascript!!!! 谁知道如何在网页中开启模式窗口? 请问有没有javascript特效讲解的教程 javascript事件激发问题 js给input赋值时无效 不能触发onChange! 读写文件 json字符串
应该在页面上下文加载的时候 直接使用 document.write()
window.onload=pri()与window.onload=pri 语句解释有什么不同
问三楼 那关于假如在function 中使用document.write(),为什么使用window.onload=pri时,通过id获得不了外联的css样式,必须要通过style定义
window.onload=pri()
window.onload=pri()是一个运算符 当他在 function对象后面时 表示 执行该function有() 则返回该函数运行后的值 没有() 则直接表示该函数
window.onload=XXX表示 window对象的 onload的时候 执行 XXX()一般浏览器在页面所有元素加载完毕后 调用 onload 事件
<body>中的内容,所以此时我通过id拿不到外联的<head>中的css样式对不对?
我这么理解对不对?
那为什么,window.onload=pri()内的document.write()不会清空html页面????
-------------------------------------------------------------------
1、document.write()是一个向窗口写入内容的文件流,这个相信你已经明白。关键是下面;
2、window.onload :
window: 浏览器的窗体对象。就是你用浏览器打开一个空白网页的时候,那白花花一片的窗口;
onload:它是一个事件,意指一些DOM元素(不是全部)的加载完成事件。例如window,iframe,image等。3、事件是要绑定以后才会起作用的。可以在JS代码中绑定,也可以直接在控件元素里绑定;但是写法不同,你恰恰就模糊在这个地方,如:
1)
<script>
function pri(){
document.write("<div id='apDiv1' style='position:absolute;width:200px;height:115px;z-index:2;left: 538px;top: 56px;' >"+"dsf"+"</div>")
}
window.onload=function(){
pri();
}
</script>
-------------
2)
<script>
function pri(){
document.write("<div id='apDiv1' style='position:absolute;width:200px;height:115px;z-index:2;left: 538px;top: 56px;' >"+"dsf"+"</div>")
}</script>
<body onload="pri()">
...............
</body>
这两种方式绑定之后,才能有页面全部内容加载完成后触发事件的可能。否则会报错而不执行你的函数。如:
<script>
function pri(){
document.write("<div id='apDiv1' style='position:absolute;width:200px;height:115px;z-index:2;left: 538px;top: 56px;' >"+"dsf"+"</div>")
}
window.onload=pri()//报错
}
这两种方式绑定之后,才能有页面全部内容加载完成后触发事件的可能。否则会报错而不执行你的函数。如:
<script>
function pri(){
document.write("<div id='apDiv1' style='position:absolute;width:200px;height:115px;z-index:2;left: 538px;top: 56px;' >"+"dsf"+"</div>")
}
window.onload=pri()//报错
}
-------------------------------
应该是:
这样绑定onload事件是错误的,它并不是等到页面加载完毕后才触发,而仅仅起到在文档加载中调用一个普通的函数pri()那样的作用,所以页面并未被清除,而仅仅是添加内容或修正内容。但是还是会报错。例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>onload与document.write</title>
<style type="text/css">
#apDiv1 {
position:absolute;
width:200px;
height:115px;
z-index:2;
left: 538px;
top: 56px;
border: 10px solid #F00;/*此样式定义了边框*/
}
</style>
</head><body>
<div id="apDiv1"></div>
<p>
<img src='http://avatar.profile.csdn.net/6/F/F/2_arrowwhite.jpg' onload="alert('image loaded')">
</p>
<script type="text/javascript">
function pri(){
document.write("<div id='apDiv1' style='position:absolute;border:1px dashed blue' >yyyyyyyyyyyy</div>")
}try{ window.onload=pri() }
catch(e){alert(e.message)}
//使用下面的方法,就会清空页面,重新写入:
//window.onload=function(){alert('window loaded! ');pri();}
</script>
</body>
</html>