javascript中的addLoadEvent函数解析

xiaoqihv8个月前 (04-08)前端设计64

onload事件是HTML DOM Event 对象的一个属性,又叫事件句柄(Event Handlers),它会在页面或图像加载完成后(注意是加载完成后)立即发生。

window.onload = func的作用就是在页面加载完成后将func函数绑定到onload事件上并执行。如果页面加载完成之后,只需要执行一个函数func,那么只用window.onload = func也就可以了,但是如果需要执行两个甚至多个函数呢?

javascript中的addLoadEvent函数解析

直接调用两次onload不就行了:

window.onload=firstfunction;window.onload=secondfunction;

这么做的话,只有secondfunction会被绑定,因为前面的值被后面的值覆盖了。那么该怎么办?

将两个函数合并到一个函数当中不就行了,匿名函数发挥作用的时候到了:

window.onload = function() {    fristfunction;    secondfunction;}

不过,它也只能绑定两个函数。还好,大神们早已解决了这个问题。西蒙·威利森 (Simon Willison)——jQuery框架的开发者之一编写了下面的addLoadEvent函数:

function addLoadEvent(func) {    var oldonload = window.onload;//将现有的事件处理函数的值存入变量中    if (typeof window.onload != 'function') {        window.onload = func;//如果这个事件处理函数没有绑定任何函数,就把新函数添加给它    } else {        window.onload = function() {            oldonload();            func();//如果已经绑定了函数,就把新函数追加到现有指令的末尾      }    }}

然后,不管页面加载完成后要执行多少个函数,只要调用这个函数就可以了:

addLoadEvent(firstfunction);addLoadEvent(secondfunction);addLoadEvent(thirdfunction);...

附:相关概念

1  支持onload事件的 HTML 标签有<body>, <frame>, <frameset>, <iframe>, <img>, <link>, <script>

    支持该事件的 JavaScript 对象有image(图像), layer, window(整个页面)

2  事件句柄(Event Handlers),可以在某个事件发生时通过一个事件句柄对某个元素进行操作。

    事件是可以被控件识别的操作,如按下确定按钮,选择某个单选按钮或者复选框。每一种控件有自己可以识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本改变事件,等等。

3  HTML DOM Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态等。事件通常与函数结合使用,函数不会在事件发生前被执行(这句很重要)。

相关文章

javascript在指定的元素前或后插入新元素

javascript在指定的元素前或后插入新元素

在前几篇的博文中,我们说了利用appendChild方法可以在DOM文档流中指定的元素后追加利用createElement方法和createTextNode方法创建的新元素,但是appendChild...

JavaScript中常见获取元素的方法汇总

JavaScript中常见获取元素的方法汇总

网页的制作离不开JavaScript(JS)今天就说说那些关于JavaScript(JS)操作DOM节点的一些属性,做个记录,以备后续查找!getattribute()DOM提供了一个名为getEle...

javascript中的addEventListener()方法

javascript中的addEventListener()方法

我们操作HTML DOM对象的时候,可以利addEventListener()方法为某个被选中的DOM对象添加一个事件,用来操作这个被选中的对象。下面就记录一下,如果利javascript的addEv...

JaveScript操作DOM节点的childNodes属性

JaveScript操作DOM节点的childNodes属性

在一棵节点树上(DOM文档),childNodes属性可以获取任何一个节点下的所有子元素节点,它获取的值是一个包含这个元素全部子元素的数组,但是这个数组中包含的东西太多,几乎每一样东西都是一个节点,甚...

jQuery ajax()使用serialize()提交form数据

jQuery ajax()使用serialize()提交form数据

这几天一直在适配用户中心插件,基本的功能也差不多了,时间不长就会上线用户中心,当然适配的过程中也遇到不少的问题,今天记录一下。jQuery的serialize()方法通过序列化表单值,创建URL编码文...

jQuery中的jQuery.noConflict()函数说明

jQuery中的jQuery.noConflict()函数说明

在jQuery库中,几乎所有的插件都被限制在它的命名空间里,通常全局对象都被很好的储存在jQuery的命名空间里,当jQuery与其它的JavaSscript库使用时不会引起冲突一般情况下jQuery...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。