如何让页面加载完成后执行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 相关文章推荐
不能再简单的无闪刷新验证码原理很简单
Nov 05 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
Apr 11 Javascript
JQuery的Ajax跨域请求原理概述及实例
Apr 26 Javascript
JS短路原理的应用示例 精简代码的途径
Dec 13 Javascript
jQuery预加载图片常用方法
Jun 15 Javascript
jQuery模仿单选按钮选中效果
Jun 24 Javascript
JavaScript排序算法动画演示效果的实现方法
Oct 18 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
Jul 17 jQuery
webpack+vue-cil中proxyTable处理跨域的方法
Jul 20 Javascript
使用RN Animated做一个“添加购物车”动画的方法
Sep 12 Javascript
layui实现数据分页功能(ajax异步)
Jul 27 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
Dec 07 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 mssql 数据库分页SQL语句
2008/12/16 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
phpize的深入理解
2013/06/03 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
jquery对表单操作2
2011/04/06 Javascript
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
2011/07/31 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
小程序实现tab标签页
2020/11/16 Javascript
python异常和文件处理机制详解
2016/07/19 Python
详解Python各大聊天系统的屏蔽脏话功能原理
2016/12/01 Python
python基础教程之五种数据类型详解
2017/01/12 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
Cocopanda波兰:购买化妆品、护肤品、护发和香水
2020/05/25 全球购物
优秀生推荐信范文
2013/11/28 职场文书
鼓励运动员的广播稿
2014/02/08 职场文书
初三班主任寄语大全
2014/04/04 职场文书
党员转正意见怎么写
2015/06/03 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书