window.onload使用时遇到的问题_1

一个简单的创建节点插入节点的代码。


若把window.onload函数这样写,运行会出现错误。

错误代码:

window.οnlοad=function()
{
	var para=document.createElement("p");
	var txt1=document.createTextNode("This is");
	para.appendChild(txt1);

	var emphasis=document.createElement("em");
	var txt2=document.createTextNode(" my ");
	emphasis.appendChild(txt2);

	para.appendChild(emphasis);

	var txt3=document.createTextNode("content. ");
	para.appendChild(txt3);

	var testdiv=document.getElementById("testdiv");
	testdiv.appendChild(para);
}
第一句在 js文件被加载时立即执行。
(1)若js文件是从HTML文档的<head>部分用<script>标签被调用的,它将在HTML文档之   前加载 到浏览器里。

(2)若<script>标签位于文档底部</body>之前,就不能保证那个文件先结束加载(浏览器可能一次加载多个).因为脚本加载时,文档可能不完整,模型也不完整。没有完整的DOM,createElement等方法就不能正常工作。


所以,必须让这些代码在HTML文档被加载到浏览器之后马上开始执行。


HTML文档全部加载完毕时将触发一个事件,这个事件有它自己的事件处理函数。


文档将被加载到一个浏览器窗口,document对象又是window对象的一个属性。当window对象触发onload事件时,document对象已经存在。


所以,可以将JS代码打包放在一个函数里,并把这个函数添加到window对象的onload事件上去就可以正常运行。


正确代码:

window.οnlοad=prepare;
function prepare()
{
	var para=document.createElement("p");
	var txt1=document.createTextNode("This is");
	para.appendChild(txt1);

	var emphasis=document.createElement("em");
	var txt2=document.createTextNode(" my ");
	emphasis.appendChild(txt2);

	para.appendChild(emphasis);

	var txt3=document.createTextNode("content. ");
	para.appendChild(txt3);

	var testdiv=document.getElementById("testdiv");
	testdiv.appendChild(para);
}



  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 `window.onload` 事件触发,整个页面及其所有资源(如图像、样式表、脚本等)都已加载完成。因此,在 `window.onload` 事件处理程序中,通常不会出现使用到未加载的元素的情况。 然而,如果在 `window.onload` 事件触发之前尝试访问某些未完全加载的元素,可能会遇到使用到未加载元素的问题。这通常发生在以下情况下: 1. 异步加载的资源:如果某些资源(如图片、外部脚本、样式表等)是异步加载的,并且在 `window.onload` 之前尚未完成加载,那么尝试访问这些资源相关的元素可能会导致问题。 2. 嵌套的 `window.onload`:如果在一个页面中存在多个嵌套的 `window.onload` 事件处理程序,并且某个嵌套的 `window.onload` 在外层 `window.onload` 触发之前执行,那么在内层 `window.onload` 中访问外层 `window.onload` 之后才加载的元素可能会导致问题。 为了确保在访问元素之前它们已经加载完成,可以使用以下方法之一: 1. 将相关代码放在 `window.onload` 事件处理程序中,以确保在页面加载完成后再执行。 2. 使用其他 DOM 事件(如 `DOMContentLoaded`)来处理元素相关的操作,该事件会在 DOM 树构建完成触发,不需要等待所有资源加载完成。 3. 在必要的情况下,使用异步加载的技术(如 Promises 或回调函数)来确保在元素加载完成后再执行相关操作。 通过以上方法,可以避免在使用到未加载元素出现问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值