Javascript 记录。写方法问题
我正在试验write方法&onload事件。这是我的密码:Javascript 记录。写方法问题,javascript,html,Javascript,Html,我正在试验write方法&onload事件。这是我的密码: <!DOCTYPE html> <html> <head> </head> <body onload="document.write('body loaded!')"> <h1>Hello World!</h1> <img onload="document.write('img loadeld
<!DOCTYPE html>
<html>
<head>
</head>
<body onload="document.write('body loaded!')">
<h1>Hello World!</h1>
<img onload="document.write('img loadeld!')" src="smiley.gif" alt="Smiley face" width="42" height="42" />
</body>
</html>
你好,世界!
如果我在浏览器中运行它,它会输出“img loadeld”和“hangs”,似乎在无限地加载页面。
我希望浏览器输出“img loadeld”,然后作为body元素准备就绪
“身体负重”,只是正常停止
我的问题是:
加载html后,当函数内部使用
document.write
时,它会写入newhtml文档。
onload是一个事件处理程序,因此
=img.onload=function(event){document.write('img loadeld!');}
它不会阻止页面加载,只会创建新的空白html文档。这是因为
document.write()
清除整个文档,然后将参数写入页面,尝试document.writeln('Img-loaded')代码>附加到正文,但要坚持您真正想要的内容:
创建一个消息容器,比如一个DIV并设置innerHTML
,不要使用。write()简单地说,在文档之后调用write()
DOM ready会导致它覆盖现有的DOM。一切都正常工作(尽管不像您预期的那样),没有任何东西是“挂起”或“阻塞”的然而,这一切发生得如此之快,以至于看起来并不是这样。希望对写入文档的工作原理和事件顺序的解释能帮助您:
您的IMG onload事件在文档关闭后触发(已达到文档就绪状态)
但是,document.write()
,只能输出到打开的文档
如果文档已关闭,document.write()
()隐式调用document.open()
(),这将擦除整个文档。调用write
,然后输出您告诉它的内容。文档将保持打开状态,直到显式关闭(document.close()
()),因此“加载微调器”将继续显示
那么,正在发生的基本操作流程(如此之快,以至于你没有注意到所有的事情都在发生,事情看起来很糟糕)是:
请求页数
收到页面响应
文档被打开,内容被解析并放置到位,包括第一个文档。write
(不必调用open,因为文档当前处于打开状态)
文件关闭
IMG标记的检索完成并触发事件
事件处理程序调用document.write
隐式重新打开文档(创建新文档,所有内容丢失;显示加载微调器)
document.write()
的参数将输出到新文档中
一切都已完成,文档仍处于打开状态
应该使用DOM操作技术(appendChild()
,写入innerHTML
,等等),而不是document.write
,以便在不覆盖所有内容的情况下修改现有内容
好消息是,既然发生了这种情况,您就知道您的映像正在成功加载。正如我之前回避的那样,您只需要找到正确的反应方式。谢谢您的详细回答:-)谢谢您的回答:-)1。)所以body onload事件发生在文档关闭之前,因此它是关闭的&没有加载微调器。我说得对吗?那么为什么我要使用这样的代码:helloworld!
第一个警报是“img负载”而不是“车身负载”???2.)如果在最后一种情况下(body onload)自动执行事件,为什么在加载图像后必须显式调用document close,而在body onload=“document.write”后我没有这样做?
<img onload="document.body.innerHTML += '<h1>Loaded</h1>'"'