如何让页面加载完成后执行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 相关文章推荐
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
Jan 25 Javascript
JavaScript实现网页图片等比例缩放实现代码及调用方式
Feb 25 Javascript
Jquery 切换不同图片示例代码
Dec 05 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
Aug 12 Javascript
jQuery实现数秒后自动提交form的方法
Mar 05 Javascript
node.js实现爬虫教程
Aug 25 Javascript
JS正则表达式之非捕获分组用法实例分析
Dec 28 Javascript
详解Angular-Cli中引用第三方库
May 21 Javascript
Angular4 反向代理Details实践
May 30 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
Aug 06 Javascript
ES6 如何改变JS内置行为的代理与反射
Feb 11 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开发工具之vs2005图解
2008/01/12 PHP
PHP COOKIE设置为浏览器进程
2009/06/21 PHP
解析zend Framework如何自动加载类
2013/06/28 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
Javascript数组的排序 sort()方法和reverse()方法
2012/06/04 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
Python heapq使用详解及实例代码
2017/01/25 Python
pandas 数据归一化以及行删除例程的方法
2018/11/10 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
python里 super类的工作原理详解
2019/06/19 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
什么是会话Bean
2015/05/14 面试题
行政主管岗位职责
2013/11/18 职场文书
家长给幼儿园的表扬信
2014/01/09 职场文书
小学教师听课制度
2014/02/01 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers