如何让页面加载完成后执行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类的封装及实现代码
Dec 02 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
Apr 01 Javascript
js限制checkbox选中个数以限制六个为例
Jul 15 Javascript
2种jQuery 实现刮刮卡效果
Feb 01 Javascript
详解JavaScript的回调函数
Nov 20 Javascript
简单实现Bootstrap标签页
Aug 09 Javascript
jQuery实现表格元素动态创建功能
Jan 09 Javascript
用Vue写一个分页器的示例代码
Apr 22 Javascript
vue项目中仿element-ui弹框效果的实例代码
Apr 22 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
Jun 06 jQuery
使用apifm-wxapi模块中的问题及解决方法
Aug 05 Javascript
Angular 多模块项目构建过程
Feb 13 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
支持oicq头像的留言簿(一)
2006/10/09 PHP
PHP 的几个配置文件函数
2006/12/21 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
Python使用MD5加密字符串示例
2014/08/22 Python
python实现按行切分文本文件的方法
2016/04/18 Python
pandas Dataframe行列读取的实例
2018/06/08 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
2019/08/19 Python
Django stark组件使用及原理详解
2019/08/22 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
给老婆的婚前保证书
2014/02/01 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
三字经教学反思
2014/04/26 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
品牌推广策划方案
2014/05/28 职场文书
商超业务员岗位职责
2015/02/13 职场文书
Java数据结构之链表相关知识总结
2021/06/18 Java/Android