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 相关文章推荐
使用EXT实现无刷新动态调用股票信息
Nov 01 Javascript
类似CSDN图片切换效果脚本
Sep 17 Javascript
页面版文本框智能提示JS代码
Nov 20 Javascript
jquery 操作表格实现代码(多种操作打包)
Mar 20 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
Jan 20 Javascript
使用npm发布Node.JS程序包教程
Mar 02 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
Oct 02 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
Apr 30 Javascript
jQuery实现弹出窗口弹出div层的实例代码
Jan 09 Javascript
Node.js使用cookie保持登录的方法
May 11 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
Dec 05 Javascript
JavaScript私有变量实例详解
Jan 24 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+shell实现多线程的方法
2015/07/01 PHP
php求今天、昨天、明天时间戳的简单实现方法
2016/07/28 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
div层的移动及性能优化
2010/11/16 Javascript
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
Angular(5.2->6.1)升级小结
2018/12/27 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
python检测lvs real server状态
2014/01/22 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
python调用外部程序的实操步骤
2019/03/04 Python
Python Pandas 箱线图的实现
2019/07/23 Python
python getpass模块用法及实例详解
2019/10/07 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
2020/03/16 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
节约粮食标语
2014/06/18 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
单位工作证明
2014/10/07 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书