您的位置:首页 > Web前端 > JavaScript

JavaScript之window.onload = somefunction 笔记

2015-12-24 15:41 609 查看
       转载自http://blog.sina.com.cn/s/blog_70c2f3780100y2pt.html

        今天在学习jQuery(《jQuery基础教程(第2版)》——Jonathan Chaffer & Karl Swedberg)的时候,本着结构与脚本分离(笔者我根据CSS里结构与形式的分离掰出来的)这一思想,做了如下笔记。

 

1.写法

 

假设我们已经定义了如下函数:

function doStuff() {

......

}

 

那么,我们既可以在HTML标记中指定该函数:

<body onload="doStuff();">(方式一)

 

也可以在JavaScript代码中指定该函数:

window.onload = doStuff;(方式二)

 

注意,上面的doStuff函数后面没有括号“()”,只使用了函数名。

 

(在测试时,如果在方式二中的doStuff后面加上了(),页面加载后并没有调用函数。)

 

这两种方式都会导致在页面加载完成后执行这个函数。但第2种方式的优点在于,它能使行为更清晰地从标记中分离出来。

 

2.思考

 

在只有一个函数的情况下,这样做没有什么问题。但是,假设我们又定义了第二个函数:

function doAnotherStuff() {

......

}

 

我们也可以将它指定为基于页面的加载来运行:

window.onload = doAnotherStuff();

 

然而,这次指定的函数,会取代刚才指定的第一个函数。因为.onload属性一次只能保存对一个函数的引用,所以不能在现有的行为基础上再增加新行为。

 

在这种情况下,通过$(document).ready()机制能够得到很好的处理。每次调用这个方法——$(document).ready()都会向内部的行为队列中添加一个新函数,当页面加载完成后,所有函数都将得到执行。而且,这些函数会按照注册它们的顺序依次执行。(虽然通过window.onload也可注册多个函数,但却不能保证按顺序执行)

 

公平地讲,jQuery并不是解决这个问题的唯一方法。我们可以编写一个 JavaScript 函数,用它构造一个调用现有的onload事件处理程序的新函数,然后再调用一个传入的事件处理程序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: