文档.编写方法问题
Document.write method questions
我正在试验写方法&onload事件。这是我的代码:
<!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",而只是"挂起",似乎是在无限加载页面。我希望浏览器输出"img loadeld",然后当body元素准备好时"车身已加载",并正常停止。
我的问题:
- 为什么会有这样的问题?为什么img元素上的onload事件阻止浏览器继续&渲染"实体加载"
- 为什么如果我从img元素中删除onload处理程序,那么响应将如预期的那样——"body loaded"并且该页面未被阻止
简单地说,在DOM就绪后调用document.write()
会导致它覆盖现有的DOM。
一切都在正常工作(尽管并不像你预期的那样),没有什么是"挂起"或"阻塞"。然而,这一切发生得太快了,以至于看起来并不是这样。希望对写入文档的工作原理和事件顺序的解释能对您有所帮助:
您的IMG onload事件在文档关闭后触发(已到达文档就绪状态)。
但是,document.write()
只能输出到打开的文档。
如果一个文档已经关闭,document.write()
(docs)会隐式调用document.open()
(documents),它会擦除整个文档。然后,您对write
的调用会输出您告诉它的内容。文档在显式关闭之前保持打开状态(document.close()
(docs)),因此"加载微调器"继续显示。
因此,正在进行的基本操作流程(如此之快,以至于你不会注意到一切都在发生,事情看起来也很糟糕)是:
- 发出页面请求
- 收到页面响应
- 文档被打开,内容被解析并放置到位,包括第一个
document.write
(不必调用open,因为文档当前处于打开状态) - 文档关闭
- IMG标记检索完成,事件启动
- 事件处理程序调用
document.write
- 文档被隐式地重新打开(新建文档,所有内容丢失;显示加载微调器)
- 您对
document.write()
的自变量已输出到新文档中 - 所有内容都已完成,文档仍处于打开状态
应该使用DOM操作技术(appendChild()
、写入innerHTML
等)而不是document.write
,以便在不覆盖所有内容的情况下修改现有内容。
好的消息是,既然发生了这种情况,你就知道你的图像加载成功了。你只需要找到正确的反应方式,就像我之前逃避的那样。
这是因为document.write()
清除整个文档,然后将参数写入页面,尝试document.writeln('Img loaded');
附加到正文,但要坚持真正想要的内容:
<img onload="document.body.innerHTML += '<h1>Loaded</h1>'"'
或者编写一个创建元素并使用document.body.appendChild(elem)
的函数,在这种情况下,您可以将document.body
替换为任何块元素
创建一个消息容器,如div并设置innerHTML
,不要使用.write()
加载html后在函数内部使用document.write
时,它会写入新的html文档。onload是一个事件处理程序,因此<img onload="document.write('img loadeld!')"/>
=img.onload = function(event){document.write('img loadeld!');}
它不阻止页面加载,只是创建新的空白html文档。
- 文档.编写方法问题
- 使用Ajax的问题's发送多个值的Post方法
- 在对象中添加方法时出现问题
- 简单的javascript方法问题
- Node.js-异步方法调用问题
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- 当服务器从 http 更改为 https 时,有哪些可能的方法可以解决问题
- .attr(“href”) 的问题!解决此问题的简单方法
- 将方法分配给变量和问题
- 随机数生成器,what'我的方法/统计数据有问题吗?[JS]
- 有没有一种方法可以在IE8中解决我的Rails javascript应用程序.js的问题
- 对象中的setInterval出现问题's方法
- 包含方法和突出显示元素的问题
- 谷歌地图API v3 addDomListener方法问题
- 这种计算画布元素中非白色像素的方法有什么问题
- Javascript替换方法有什么问题
- 角度非幂等方法问题
- 将访问令牌添加到主干中的标头时出现问题:它会更改方法
- Android驱动程序的scrollTo和scrollToExact 方法的问题.方法不会滚动到所需的元素文本,而是滚动
- 在集合中引用变量时出现问题.方法在渲染函数中