$(document).ready()与windom.onload = function(){}的方法说明和加载时机

对元素的操作和事件的绑定需要等待一个合适的时机,如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>页面未加载执行失败</title>
		<script type="text/javascript" src="../js/jquery-1.8.3.js"></script>
		<script>
			document.getElementById("panel").onclick = function() {
				alert("元素已经加载完毕 !");
			}
			/*
				执行错误,为什么?
				因为dom还未加载完毕。
			*/
		</script>
	</head>

	<body>
		<div id="panel">click me.</div>
	</body>

</html>

如果这样,就还没有等待元素加载就给div#panel绑定一个事件,浏览器Console中就会报错:TypeError:document.getElementById(…)is null;

更改一下时机,就能成功绑定事件

把时间绑定到body里,元素之后
由于绑定事件在元素之后,所有可以成功获取绑定的点击事件:

方式一:把时间绑定到body里,元素之后

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>4-1-2</title>
	</head>
	<!--解决办法:
		方式一:把时间绑定到body里,元素之后
		方式二:将JS代码放到一个页面加载函数中去-->

	<body>
		<div id="panel">click me.</div>
		<script type="text/javascript">
				document.getElementById("panel").onclick = function() {
					alert("元素已经加载完毕 !");
				}
				/*正确执行*/
		</script>
	</body>

</html>

在这里插入图片描述
$(document).ready()与windom.onload = function(){}的方法说明和加载时机
( d o c u m e n t ) . r e a d y ( ) 的 三 种 简 写 : (document).ready()的三种简写: (document).ready()(document).ready(function(){}); ( ) . r e a d y ( f u n c t i o n ( ) ) ; ().ready(function(){}); ().ready(function())(function(){})

区别:
( d o c u m e n t ) . r e a d y ( ) 方 法 的 作 用 : 当 D O M 加 载 完 毕 的 时 候 , 执 行 这 个 指 定 的 方 法 。 表 示 文 档 结 构 已 经 加 载 完 成 ( 不 包 含 图 片 等 非 文 字 媒 体 文 件 ) 。 因 为 只 有 d o c u m e n t 状 态 r e a d y 之 后 , 对 元 素 的 操 作 才 是 安 全 的 。 (document).ready()方法的作用:当DOM加载完毕的时候,执行这个指定的方法。表示文档结构已经加载完成(不包含图片等非文字媒体文件)。因为只有document状态ready之后,对元素的操作才是安全的。 (document).ready()DOMdocumentready(document).ready()仅在DOM准备好的时候执行一次,但是可以多次绑定ready事件。
windom.onload事件是后绑定事件,会等到页面渲染完成执行,即等到所有资源(如:图片)都完全加载完成的时候才会执行。

注意:ready()方法多次调用,传入的方法会串联执行(追加),但是在JS中,windom.onload是赋值一个方法,即后面的会覆盖前面的。

方式二:将JS代码放到一个页面加载函数中去–>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>页面未加载执行失败</title>
		<script type="text/javascript" src="../../js/jquery-1.8.3.js"></script>
		<script>
//			$(document).ready(function(){
//				document.getElementById("panel").onclick = function() {
//					alert("元素已经加载完毕 !");
//				}
//			});
			$(function(){
				document.getElementById("panel").onclick = function() {
					alert("元素已经加载完毕 !");
				}
			});
		</script>
	</head>

	<body>
		<div id="panel">click me.</div>
	</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值