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 相关文章推荐
如何实现动态删除javascript函数
May 27 Javascript
IE FF OPERA都可用的弹出层实现代码
Sep 29 Javascript
禁止你的左键复制实用技巧
Jan 04 Javascript
jquery xMarquee实现文字水平无缝滚动效果
Apr 29 Javascript
充分发挥Node.js程序性能的一些方法介绍
Jun 23 Javascript
js使用cookie记录用户名的方法
Nov 26 Javascript
jQuery插件制作的实例教程
May 16 Javascript
JS添加删除DIV的简单实例
Jul 08 Javascript
前端构建工具之gulp的配置与搭建详解
Jun 12 Javascript
简单实现js鼠标跟随效果
Aug 02 Javascript
axios使用拦截器统一处理所有的http请求的方法
Nov 02 Javascript
浅谈JavaScript节流和防抖函数
Aug 25 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
Js+XML 操作
2006/09/20 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
js实现图片轮播效果
2015/12/19 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
2016/11/27 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
原生js轮播特效
2017/05/18 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
Python深入学习之上下文管理器
2014/08/31 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
python3.7.0的安装步骤
2018/08/27 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
医学毕业生自我鉴定
2013/10/30 职场文书
党员领导干部承诺书
2014/05/28 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
2015年除四害工作总结
2015/07/23 职场文书
社区服务理念口号
2015/12/25 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers