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 相关文章推荐
JQuery的Validation插件中Remote验证的中文问题
Jul 26 Javascript
javascript采用数组实现tab菜单切换效果
Dec 12 Javascript
jQuery中:empty选择器用法实例
Dec 30 Javascript
JSON字符串和对象之间的转换详解
May 26 Javascript
JS简单限制textarea内输入字符数量的方法
Oct 14 Javascript
微信开发 js实现tabs选项卡效果
Oct 28 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
基于jQuery实现表格的排序
Dec 02 Javascript
vuejs简单验证码功能完整示例
Jan 08 Javascript
详解Vue前端对axios的封装和使用
Apr 01 Javascript
createObjectURL方法实现本地图片预览
Sep 30 Javascript
使用Promise封装小程序wx.request的实现方法
Nov 13 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 discuz 主题表和回帖表的设计
2009/03/13 PHP
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
使用yeoman构建angular应用的方法
2017/08/14 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
浅析Vue 和微信小程序的区别、比较
2018/08/03 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
python中偏函数partial用法实例分析
2015/07/08 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
Django开发中的日志输出的方法
2018/07/02 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
使用python实现名片管理系统
2020/06/18 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
应届本科生推荐信范文
2013/12/25 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
村党组织公开承诺书
2015/04/30 职场文书
刑事上诉状范文
2015/05/22 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
javascript的setTimeout()使用方法总结
2021/11/20 Javascript