全面解析jQuery $(document).ready()和JavaScript onload事件


Posted in Javascript onJune 08, 2016

对元素的操作和事件的绑定需要等待一个合适的时机,可以看下面的例子:

<!DOCTYPE html>
<meta charset="utf-8">
<html>
<head>
<title>1-1</title>
<script type="text/javascript">
document.getElementById("panel").onclick = function () {
alert("元素已经加载完毕 !");
}
/*执行错误*/
</script>
</head>
<body>
<div id="panel">click me.</div>
</body>
</html>

如果这样,还没有等待元素加载完就给 div#panel 绑定了一个事件,浏览器Console中会报错: TypeError:

document.getElementById(...) is null

更改一下时机,下面三个程序都是可以成功绑定事件的,点击元素之后会弹出相应的alert().

把事件绑定放在body里,元素之后:

由于绑定事件在元素之后,所以可以成功获取 div#panel 的元素,并在 div#panel 上绑定点击事件。

<!DOCTYPE html>
<meta charset="utf-8">
<html>
<head>
<title>1-2</title>
</head>
<body>
<div id="panel">click me.</div>
<script type="text/javascript">
document.getElementById("panel").onclick = function () {
alert("元素已经加载完毕 !");
}
/*正确执行*/
</script>
</body>
</html>

把事件绑定放在window.onload中进行事件绑定:

window.onload 事件的处理函数则在页面所有元素加载完成之后才执行,所以这里给获取元素并绑定事件也是可行的。

<!DOCTYPE html>
<meta charset="utf-8">
<html>
<head>
<title>1-2</title>
</head>
<body>
<div id="panel">click me.</div>
<script type="text/javascript">
document.getElementById("panel").onclick = function () {
alert("元素已经加载完毕 !");
}
/*正确执行*/
</script>
</body>
</html>
jQuery的ready()方法传入绑定事件的方法:
<!DOCTYPE html>
<meta charset="utf-8">
<html>
<head>
<title>1-3</title>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<script>
$(document).ready(function(){
document.getElementById("panel").onclick = function () {
alert("元素已经加载完毕 !");
}
/*正确执行*/
});
</script>
</head>
<body>
<div id="panel">click me.</div>
</body>
</html>

jQuery $(document).ready()和window.onload

根据ready()方法的API说明http://api.jquery.com/ready/。

这个方法接收一个function类型的参数ready(handler), 方法的作用是: Specify a function to execute when the DOM is fully loaded.即当DOM加载完毕的时候,执行这个指定的方法.因为只有document的状态ready之后,对元素的操作才是安全的. $(document).ready() 仅在DOM准备好的时候执行一次,但可以多次绑定 ready 事件。

与ready相比,load事件会等到页面渲染完成执行,即等到所有的资源(比如图片)都完全加载完成的时候才会执行。 $(window).load(function(){…}) 会等整个页面,不仅仅是DOM,还包括图像和iframes都准备好之后,再执行.而ready()是在DOM准备好之后就执行了,即DOM树建立完成的时候.所以通常ready()是一个更好的时机.

如果DOM初始化完成之后再调用ready()方法,传入的新的handler将会立即执行.

注意:ready()方法多次调用,传入的handler方法会串联执行(追加).而JavaScript中,window.onload是赋值一个方法,即后面的会覆盖掉前面的.

$(document).ready()的三种简写

$( document ).ready(handler)
$().ready(handler)//(this is not recommended)
$(handler)

window对象和document对象

Window对象表示浏览器中打开的窗口: http://www.w3school.com.cn/jsref/dom_obj_window.asp
Document对象表示载入浏览器的HTML文档: http://www.w3school.com.cn/jsref/dom_obj_document.asp

Event对象

Event 即事件,代表了各种状态:http://www.w3school.com.cn/jsref/dom_obj_event.asp

事件句柄使我们可以在事件发生的时候附加一些操作和处理,比如按钮点击事件发生的时候,进行什么什么操作.上面的参考链接中含有一个属性列表,对应各种事件,可以利用这些属性定义事件的行为.文中关注的onload就是其中一个事件.

onload事件

onload 事件: http://www.w3school.com.cn/jsref/event_onload.asp

onload 事件是在加载完成后立即发生.(注意其中的l是小写).

支持该事件的标签是: <body>, <frame>, <frameset>, <iframe>, <img>, <link>, <script>

支持该事件的JavaScript对象是: image, layer, window .注意这里并没有 document .

onload使用解析

最常用的就是 window.onload , 会等到整个页面及各种资源都加载完成之后再执行后面赋值的 function 行为.另外,可以在标签中使用 onload ,比如:

<body onload="inlineBodyOnloadTimeCounter();">

其中 inlineBodyOnloadTimeCounter() 是一个自定义的JavaScript function.

注意 jQuery ready() 的API文档中有这么一段:

The .ready() method is generally incompatible with the attribute. If load must be used, either do not use .ready() or use jQuery's .load() method to attach load event handlers to the window or to more specific items, like images.

注释: ready() 方法和 <body onload=""> 是不兼容的.

以上所述是小编给大家介绍的全面解析jQuery $(document).ready()和JavaScript onload事件的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript打开新窗口同时关闭旧窗口
Jan 16 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
Dec 05 Javascript
超详细的javascript数组方法汇总
Nov 21 Javascript
js判断移动端是否安装某款app的多种方法
Dec 18 Javascript
原生JS实现图片轮播效果
Dec 26 Javascript
js 获取html5的data属性实现方法
Jul 28 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
Sep 12 jQuery
判断jQuery是否加载完成,没完成继续判断的解决方法
Dec 06 jQuery
node实现基于token的身份验证
Apr 09 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
Feb 27 Javascript
vue实现图片预览组件封装与使用
Jul 13 Javascript
JS继承最简单的理解方式
Mar 31 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
Jun 08 #Javascript
JavaScript中两个字符串的匹配
Jun 08 #Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
Jun 08 #Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
Jun 08 #Javascript
玩转JavaScript OOP - 类的实现详解
Jun 08 #Javascript
Javascript之String对象详解
Jun 08 #Javascript
浅谈JavaScript函数的四种存在形态
Jun 08 #Javascript
You might like
php的XML文件解释类应用实例
2014/09/22 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
javascript 计算两个整数的百分比值
2009/12/26 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
Javascript的表单验证-揭开正则表达式的面纱
2016/03/18 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
[56:20]LGD vs VP Supermajor 败者组决赛 BO3 第三场 6.10
2018/07/04 DOTA
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
canvas实现飞机打怪兽射击小游戏的示例代码
2018/07/09 HTML / CSS
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
如何删除一个表里面的重复行
2013/07/13 面试题
DataList 能否分页,请问如何实现?
2015/05/03 面试题
心理学专业毕业生推荐信范文
2013/11/21 职场文书
七一讲话心得体会
2014/09/05 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
源码分析Redis中 set 和 sorted set 的使用方法
2022/03/22 Redis