如何让页面加载完成后执行js


Posted in Javascript onJune 26, 2013

在很多情况下,js代码需要设置为在页面加载之后才去执行,如果在页面没有加载完毕就执行js代码,很容易出现报错情况,因为页面中的某些dom根本没有加载完毕。本文章向大家介绍如何让js脚本在页面加载完后再执行的几种方法。需要的朋友可以参考一下。

javascript 当页面dom模型加载完成后才执行javascript

不能使用<body onload="">

加上 defer 等于在页面完全在入后再执行,相当于 window.onload ,但应用上比 window.onload 更灵活

<!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>
</head>
<body>
<script defer="defer">
alert("页面加载完我才执行的")
</script>
先看到这段话 然后再执行上面的 JS 如果去掉上面的 defer="defer" 那么会先执行JS 在看到这段话
</body>
</html>

方法1:使用defer

<script defer="defer" language="javascript"></script>
//或者
<script defer language="javascript"></script>

但这种方法只有IE支持,其他浏览器不识别defer 这种方法不靠谱
 
方法2:window.onload

<script type=”text/javascript”>
window.onload=function (){
  var userName=”xiaoming”;
  alert(userName);
}
</script>

但这个方法在IE中只能在一个地方调用,假如2个地方调用,后面调用的就会把前面的添加的覆盖掉; 

方法3:jQuery方法,需要引用jQuery文件。

<script type=”text/javascript”>
$(document).ready(function (){
  var userName=”xiaoming”;
  alert(userName);
});
</script>

下面我们介绍一下Window.onload=function (){}与$(document).ready(function (){})的区别:
在Jquery里面,我们可以看到两种写法:$(function(){}) 和$(document).ready(function(){})
这两个方法的效果都是一样的,都是在dom文档树加载完之后执行一个函数(注意,这里面的文档树加载完不代表全部文件加载完)。
而window.onload是在dom文档树加载完和所有文件加载完之后执行一个函数。也就是说$(document).ready要比window.onload先执行。
那么Jquery里面$(document).ready函数的内部是怎么实现的呢?下面我们就来看看:
我们来为document添加一个ready函数:

document.ready = function (callback) {
      ///兼容FF,Google
      if (document.addEventListener) {
        document.addEventListener('DOMContentLoaded', function () {
          document.removeEventListener('DOMContentLoaded', arguments.callee, false);
          callback();
        }, false)
      }
       //兼容IE
      else if (document.attachEvent) {
        document.attachEvent('onreadystatechange', function () {
           if (document.readyState == "complete") {
                document.detachEvent("onreadystatechange", arguments.callee);
                callback();
            }
        })
      }
      else if (document.lastChild == document.body) {
        callback();
      }
    }

document.ready这个函数是实现了。我们再来验证一下最上面所说的“ready要比onload先执行”:

window.onload = function () {
      alert('onload');
    };
    document.ready(function () {
      alert('ready');
    });

执行这段代码之后,你会看到浏览器里面会先弹出“ready”,在弹出onload。
这个大家还是亲手试试吧!

Javascript 相关文章推荐
匹配任意字符的正则表达式写法
Apr 29 Javascript
javascript 回调函数详解
Nov 11 Javascript
JavaScript获取按钮所在form表单id的方法
Apr 02 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
Dec 01 Javascript
js实现页面跳转的五种方法推荐
Mar 10 Javascript
jquery插件方式实现table查询功能的简单实例
Jun 06 Javascript
jQuery Jsonp跨域模拟搜索引擎
Jun 17 jQuery
ES6学习之变量的两种命名方法示例
Jul 18 Javascript
基于JS递归函数细化认识及实用实例(推荐)
Aug 07 Javascript
微信小程序之页面拦截器的示例代码
Sep 07 Javascript
vue构建动态表单的方法示例
Sep 22 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
Dec 05 Javascript
文件编码导致jquery失效的解决方法
Jun 26 #Javascript
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
Jun 26 #Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 #Javascript
中文路径导致unitpngfix.js不正常的解决方法
Jun 26 #Javascript
解析javascript 数组以及json元素的添加删除
Jun 26 #Javascript
解析jquery获取父窗口的元素
Jun 26 #Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
Jun 26 #Javascript
You might like
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
文字幻灯片
2006/06/26 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
vue 之 .sync 修饰符示例详解
2018/04/21 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
Python 登录网站详解及实例
2017/04/11 Python
python九九乘法表的实例
2017/09/26 Python
有趣的python小程序分享
2017/12/05 Python
详解python-图像处理(映射变换)
2019/03/22 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
2019/08/30 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
网上蛋糕店创业计划书
2014/01/24 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
2015年见习期工作总结
2014/12/12 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
运输公司工作总结
2015/08/11 职场文书