在jQuery中,我们使用$(document).ready()来替代JavaScript中的window.onload,但这并不是简单的替换,实际上jQuery的ready事件跟JavaScript的onload事件虽然有着相同的功能,但是两者之间也有着细微的区别。

一、JavaScript的onload事件

在JavaScript中,onload表示文档加载完成后再执行的一个事件。

语法:

window.onload = function(){ …… }

说明:

对于JavaScript的onload事件来说,只有当页面所有DOM元素以及所有外部文件(图片、外部CSS、外部JavaScript等)加载完成之后才会执行。这里的所有DOM元素,指的是HTML部分的代码。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <link href="css/index.css" rel="stylesheet" type="text/css" /> <script> window.onload = function(){ var oBtn = document.getElementById("btn"); oBtn.onclick = function(){ alert("欢迎来到绿叶学习网!"); }; } </script> </head> <body> <input id="btn" type="button" value="提交"><br/> <img src="img/1.png" alt=""> </body> </html>

浏览器预览效果如下图所示。

分析:

在这个例子中,所有DOM元素加载完成后还不能触发onload事件,还必须等到外部CSS文件以及图片加载完成才可以。

二、jQuery的ready事件

在jQuery中,ready也表示文档加载完成后再执行的一个事件。

语法:

$(document).ready(function(){ …… })

说明:

对于jQuery的ready事件来说,只要页面所有DOM元素加载完成就可以执行,不需要再等外部文件(图片、外部CSS、外部JavaScript)加载完成。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <link href="css/index.css" rel="stylesheet" type="text/css" /> <script> $(document).ready(function(){ $("#btn").click(function(){ alert("欢迎来到绿叶学习网!"); }); }) </script> </head> <body> <input id="btn" type="button" value="提交"><br/> <img src="img/1.png" alt=""> </body> </html>

浏览器预览效果如下图所示。

分析:

在这个例子中,只需要等所有DOM元素加载完成后就可以执行ready事件,而不需要再等到外部CSS文件以及图片加载完成。

从上面两个例子我们可以总结一下:jQuery的ready事件仅仅是DOM元素加载完成就可以执行,而JavaScript的onload事件除了DOM元素加载完成后还需要等所有外部文件也加载完成才可以执行。

很明显,jQuery的ready事件相对于JavaScript的onload事件来说,可以极大地提高了页面的响应速度,有着更好的用户体验。

三、ready事件的4种写法

在jQuery中,对于ready事件,共有以下4种写法。

语法:

//写法1: $(document).ready(function(){ …… }) //写法2: jQuery(document).ready(function(){ …… }) //写法3: $(function(){ …… }) //写法4: jQuery(function(){ …… })

说明:

在写法1中,$(document)表示选取document,然后调用ready()方法。其中ready()方法的参数是一个匿名函数,如下图所示。

在写法2中,是jQuery的别名。因此我们可以使用来代替jQuery,两者是等价的,即$()等价于jQuery()。

在写法3中,实际上写法3是我们最常用的也是最简单的,在此之前大家已经接触过很多了。在实际开发中,我们也建议使用这种写法。

四、深入了解jQuery的ready事件

在JavaScript中,window.onload只能调用一次,如果多次调用,则只会执行最后一个。

举例:多次调用window.onload

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script> window.onload = function(){ console.log("第1次调用"); } window.onload = function(){ console.log("第2次调用"); } window.onload = function(){ console.log("第3次调用"); } </script> </head> <body> </body> </html>

控制台输出结果如下图所示。

分析:

从这个例子可以看出,如果多次调用window.onload,则JavaScript只会执行最后一次window.onload。为了解决这个问题,我们大多数时候是使用addEventListener()来实现,代码如下:

window.addEventListener("load", function(){}, false);

但是在jQuery中,ready事件是可以多次执行的。从这里也可以看出jQuery近乎完美的兼容性。

举例:多次调用$(document).ready()

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(document).ready(function(){ console.log("第1次调用"); }) $(document).ready(function () { console.log("第2次调用"); }) $(document).ready(function () { console.log("第3次调用"); }) </script> </head> <body> </body> </html>

控制台输出结果如下图所示。