jquery的$(document).ready()和onload的加载顺序


Posted in Javascript onMay 26, 2010

最近在改一个嵌入在frame中的页面的时候,使用了jquery做效果,而页面本身也绑定了onload事件。改完后,Firefox下测试正常流畅,IE下就要等个十几秒jquery的效果才出现,黄花菜都凉了。

起初以为是和本身onload加载的方法冲突。网上普遍的说法是$(document).ready()是在页面DOM解析完成后执行,而onload事件是在所有资源都准备完成之后才执行,也就是说$(document).ready()是要在onload之前执行的,尤其当页面图片较大较多的时候,这个时间差可能更大。可是我这页面分明是图片都显示出来十几秒了,还不见jquery的效果出来。

删了onload加载的方法试试,结果还是一样,看来没有必要把原本的onload事件绑定也改用$(document).ready()来写。那是什么原因使得Firefox正常而IE就能呢?接着调试,发现IE下原来绑定的onload方法竟然先于$(document).ready()的内容执行,而Firefox则是先执行$(document).ready()的内容,再执行原来的onload方法。这个和网上的说法似乎不完全一致啊,呵呵,有点意思,好像越来越接近真相了。

翻翻jquery的源码看看$(document).ready()是如何实现的吧:

if ( jQuery.browser.msie && window == top ) (function(){ 
if (jQuery.isReady) return; 
try { 
document.documentElement.doScroll("left"); 
} catch( error ) { 


setTimeout( arguments.callee, 0 ); 



 return; 


} 

 // and execute any waiting functions 

 jQuery.ready(); 
})(); 
jQuery.event.add( window, "load", jQuery.ready );

结果很明了了,IE只有在页面不是嵌入frame中的情况下才和Firefox等一样,先执行$(document).ready()的内容,再执行原来的onload方法。对于嵌入frame中的页面,也只是绑定在load事件上执行,所以自然是在原来的onload绑定的方法执行之后才轮到。而这个页面中正好在测试环境下有一个访问不到的资源,那十几秒的延迟正是它放大出的时间差。

作者:Joyce Liu

Javascript 相关文章推荐
拖动一个HTML元素
Dec 22 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
Apr 18 Javascript
Jquery post传递数组方法实现思路及代码
Apr 28 Javascript
JavaScript中getUTCMinutes()方法的使用详解
Jun 10 Javascript
jQuery实现简单的图片查看器
Sep 11 Javascript
jQuery如何解决IE输入框不能输入的问题
Oct 08 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
May 10 Javascript
Three.js开发实现3D地图的实践过程总结
Nov 20 Javascript
node.js中fs文件系统目录操作与文件信息操作
Feb 24 Javascript
JavaScript实现的简单加密解密操作示例
Jun 01 Javascript
微信小程序实现两个页面传值的方法分析
Dec 11 Javascript
angular异步验证器防抖实例详解
Mar 31 Javascript
网页前台通过js非法字符过滤代码(骂人的话等等)
May 26 #Javascript
jQuery select操作控制方法小结
May 26 #Javascript
select 控制网页内容隐藏于显示的实现代码
May 25 #Javascript
JQuery 动态扩展对象之另类视角
May 25 #Javascript
jQuery的Ajax时无响应数据的解决方法
May 25 #Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
May 25 #Javascript
ExtJS 2.0 GridPanel基本表格简明教程
May 25 #Javascript
You might like
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
为指定元素增加样式的js代码
2009/12/09 Javascript
Jquery 选中表格一列并对表格排序实现原理
2012/12/15 Javascript
你必须知道的Javascript知识点之"字面量和对应类型"说明介绍
2013/04/23 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
详解webpack3如何正确引用并使用jQuery库
2017/08/26 jQuery
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
Python新手学习raise用法
2020/06/03 Python
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
创业计划书如何编写
2014/02/06 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
AngularJS实现多级下拉框
2022/03/25 Javascript
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers