如何让页面加载完成后执行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 相关文章推荐
用正则xmlHttp实现的偷(转)
Jan 22 Javascript
JavaScript中SQL语句的应用实现
May 04 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
Jan 10 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
Jan 21 Javascript
18个非常棒的jQuery代码片段
Nov 02 Javascript
JS递归遍历对象获得Value值方法技巧
Jun 14 Javascript
JavaScript自学笔记(必看篇)
Jun 23 Javascript
js 获取范围内的随机数实例代码
Aug 02 Javascript
jQuery学习之DOM节点的插入方法总结
Jan 22 Javascript
javascript基础知识之html5轮播图实例讲解(44)
Feb 17 Javascript
五分钟搞懂Vuex实用知识(小结)
Aug 12 Javascript
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
文件编码导致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实现javascript的escape和unescape函数
2013/06/29 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
js 窗口抖动示例
2013/09/04 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
分享一款基于jQuery的视频播放插件
2014/10/09 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
jQuery属性选择器用法实例分析
2019/06/28 jQuery
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
Python转换HTML到Text纯文本的方法
2015/01/15 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
详解python statistics模块及函数用法
2019/10/27 Python
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
大四自我鉴定范文
2013/10/06 职场文书
小学毕业寄语大全
2014/04/03 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
合理化建议书
2015/02/04 职场文书
财政局个人年终总结
2015/03/03 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python