如何让页面加载完成后执行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 相关文章推荐
简单谈谈javascript中的变量、作用域和内存问题
Aug 30 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
Sep 17 Javascript
js全选按钮的实现方法
Nov 17 Javascript
深入理解jQuery之防止冒泡事件
May 24 Javascript
前端开发之CSS原理详解
Mar 11 Javascript
javascript 玩转Date对象(实例讲解)
Jul 11 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
Sep 12 Javascript
JS实现的JSON序列化操作简单示例
Jul 02 Javascript
jQuery利用FormData上传文件实现批量上传
Dec 04 jQuery
Vue 之孙组件向爷组件通信的实现
Apr 23 Javascript
VUEX 数据持久化,刷新后重新获取的例子
Nov 12 Javascript
Vue实现下拉加载更多
May 09 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
linux命令之调试工具strace的深入分析
2013/06/03 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
JS实现淡蓝色简洁竖向Tab点击切换效果
2015/10/06 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
vue组件中的数据传递方法
2018/05/14 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
Python学习笔记之if语句的使用示例
2017/10/23 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
Python csv模块使用方法代码实例
2019/08/29 Python
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
中专毕业生自我鉴定范文
2013/11/09 职场文书
2015年元旦活动总结
2014/05/09 职场文书
美食节目策划方案
2014/05/31 职场文书
公司证明怎么写
2014/09/22 职场文书
服务员态度差检讨书
2014/10/28 职场文书
生日赠语
2015/06/23 职场文书
行政处罚事先告知书
2015/07/01 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫