如何让页面加载完成后执行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 03 Javascript
浏览器窗口加载和大小改变事件示例
Feb 27 Javascript
一个JavaScript处理textarea中的字符成每一行实例
Sep 22 Javascript
JQuery的ON()方法支持的所有事件罗列
Feb 28 Javascript
jQuery提示插件alertify使用指南
Apr 21 Javascript
Javascript实现计算个人所得税
May 10 Javascript
javascript删除数组重复元素的方法汇总
Jun 24 Javascript
javascript+html5实现绘制圆环的方法
Jul 28 Javascript
纯js实现倒计时功能
Jan 06 Javascript
node.js中cluster的使用教程
Jun 09 Javascript
vue中的inject学习教程
Apr 24 Javascript
javascript实现搜索筛选功能实例代码
Nov 12 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
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
php实现删除空目录的方法
2015/03/16 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
js正则表达式的使用详解
2013/07/09 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
Python 变量类型及命名规则介绍
2013/06/08 Python
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
各个系统下的Python解释器相关安装方法
2015/10/12 Python
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
python中的 zip函数详解及用法举例
2020/02/16 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
软件配置管理有什么好处
2015/04/15 面试题
工商管理专业应届生求职信
2013/11/04 职场文书
师德师风建设方案
2014/05/08 职场文书
音乐教师求职信
2014/06/28 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
销售经理岗位职责
2015/01/31 职场文书
世界文化遗产导游词
2015/02/13 职场文书
班主任培训研修日志
2015/11/13 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
keepalived + nginx 实现高可用方案
2022/12/24 Servers