如何让页面加载完成后执行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 相关文章推荐
js传值 判断
Oct 26 Javascript
javascript 关闭IE6、IE7
Jun 01 Javascript
jQuery中get和post方法传值测试及注意事项
Aug 08 Javascript
js设置控件的隐藏与显示的两种方法
Aug 21 Javascript
AngularJS 实现按需异步加载实例代码
Oct 18 Javascript
angular十大常见问题
Mar 07 Javascript
用angular实现多选按钮的全选与反选实例代码
May 23 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
Jun 30 Javascript
详解AngularJS跨页面传值(ui-router)
Aug 23 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
Jul 29 Javascript
JS实现简单的抽奖转盘效果示例
Feb 16 Javascript
JavaScript怎样在删除前添加确认弹出框?
May 27 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制作静态网站的模板框架(四)
2006/10/09 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
CI框架的安全性分析
2016/05/18 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
ext 同步和异步示例代码
2009/09/18 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
Python生成随机密码
2015/03/10 Python
python中的格式化输出用法总结
2016/07/28 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
pycharm创建一个python包方法图解
2019/04/10 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
澳大利亚领先的美容护肤品零售商之一:SkincareStore
2018/01/22 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
成人大专自我鉴定范文
2013/10/19 职场文书
公司授权委托书
2014/04/04 职场文书
小学生常见病防治方案
2014/06/06 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
如何用vue实现网页截图你知道吗
2021/11/17 Vue.js