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 相关文章推荐
location.href用法总结(最主要的)
Dec 27 Javascript
ExtJS4 动态生成的grid导出为excel示例
May 02 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
Aug 08 Javascript
js电话号码验证方法
Sep 28 Javascript
javascript绘制漂亮的心型线效果完整实例
Feb 02 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
May 05 Javascript
浅析javaScript中的浅拷贝和深拷贝
Feb 15 Javascript
vue将对象新增的属性添加到检测序列的方法
Feb 24 Javascript
浅谈Webpack核心模块tapable解析
Sep 11 Javascript
JS如何实现手机端输入验证码效果
May 13 Javascript
Vue微信公众号网页分享的示例代码
May 28 Javascript
Javascript实现关闭广告效果
Jan 29 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
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
angular bootstrap timepicker TypeError提示怎么办
2017/06/13 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
python读取一个目录下所有txt里面的内容方法
2018/06/23 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
捷克电器和DJ设备网上商店:Electronic-star
2017/07/18 全球购物
印度购物网站:TATA CLiQ
2017/11/23 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
大学生优秀自荐信范文
2014/02/25 职场文书
消防安全标语
2014/06/07 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
群众路线自查报告及整改措施
2014/11/04 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
撤诉书怎么写
2015/05/19 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
使用Redis实现分布式锁的方法
2022/06/16 Redis