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 相关文章推荐
$()JS小技巧
Jul 21 Javascript
查询绑定数据岛的表格中的文本并修改显示方式的js代码
Dec 15 Javascript
jquery+json 通用三级联动下拉列表
Apr 19 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
May 07 Javascript
高性能JavaScript DOM编程(1)
Aug 11 Javascript
详解vue过滤器在v2.0版本用法
Jun 01 Javascript
vue做网页开场视频的实例代码
Oct 20 Javascript
vue使用自定义icon图标的方法
May 14 Javascript
JS实现自定义弹窗功能
Aug 08 Javascript
小程序登录态管理的方法示例
Nov 13 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
Feb 27 Javascript
浅谈Three.js截图并下载的大坑
Nov 01 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
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
Banner程序
2006/10/09 PHP
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
javascript 循环读取JSON数据的代码
2010/07/17 Javascript
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
2013/06/26 Javascript
js综合应用实例简单的表格统计
2013/09/03 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
学习Bootstrap组件之下拉菜单
2015/07/28 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
vue组件中使用props传递数据的实例详解
2018/04/08 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
React和Vue中监听变量变化的方法
2018/11/14 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
利用Python学习RabbitMQ消息队列
2015/11/30 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
简历自我评价模版
2014/01/31 职场文书
小学假期安全广播稿
2014/09/28 职场文书