addLoadEvent和js window.onloadd的问题

onload=”alert(‘欢迎光临!’)”但这样做有個大的缺陷,事件会在网页完全下载完后才会执行包括网页中的图片或Flash等,如果网页中的图片比较大或有很多图可能还没等网页完全丅载完网友已经点击链接到其它网页去了,这样这个事件就没有执行了另外在某些特殊情况下可能还修改不了网页的body参数。如在别人网站发表文章时或用CMS整站系统时。 

// 这里的newFunc就是你写的函数的函数名

1、把现有的js window.onloadd事件处理函数的值存入到oldonload中 2、如果在这个处理函数上还没囿绑定任何函数,就将该函数添加给它 3、如果在这个处理函数上已经绑定了一些函数,就把该函数追加到现有指定的末尾



作为javascript初学者茬学习使用 js window.onloadd 事件调动函数时,常常会大意地写成:

当 func() 中需要使用DOM读取网页中的节点时func()无法正常运行,且浏览器报错但使用下面正确的格式,就不会有问题:

为什么一个括号会有这么大的影响js window.onloadd=func()语句在运行中到底发生什么?

进一步debug会发现实际上浏覽器在执行这个函数时,根本无法读取到 id=”demo”的 a 元素节点修改17行代码为:

当这个函数被执行时,body元素根本还没有加载出来实际上,上媔的代码让这个函数在页面加载完毕前就开始执行了,而此时此刻文档的DOM结构还没有形成。

  1. 当等式右边没有括号时该语句把func函数赋值给了js window.onloadd事件。当页面加载完毕js window.onloadd触发,开始执行func函数
  2. 当等式右边括号时,该语句把func函数执行后的返回值赋值給js window.onloadd事件所以在页面加载完成之前,func()必须要事先执行并生成一个返回值给js window.onloadd事件否者当页面加载完成后js window.onloadd事件无内容可以执行。然而页面加載完成前文档DOM结构尚未形成,无法使用DOM方法读取文档元素程序报错。

运行无报错链接颜色变为红色(说明getNewFunc函数返回给js window.onloadd的新函数已被执行),点击“测试”链接弹出js window.onloadd的值:

果然当等式右边函数带有括号时,该函数将在页面被加载前执行并将返回值傳给js window.onloadd事件;当页面加载完毕触发js window.onloadd事件——立即执行刚才的返回值

附加实验:试试返回非函数

猜测:js window.onloadd只能被赋予函数,其他类型无法赋予只能为空

js window.onloadd()=func()语句的本意是,将func函数执行后的返回值传递给js window.onloadd事件这意味着func函数将在js window.onloadd事件触发前执行,也就是說在窗口加载完毕前执行而此时页面文档尚未加载完毕、DOM结构没有成型。当func函数需要利用DOM方法访问节点时(比如某个标签)将会出现错誤

以上是个人学习理解,思考可能存在不严谨的地方欢迎学习交流!

原创博文,转载请注明出处

我要回帖

更多关于 window.onload 的文章

 

随机推荐