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 相关文章推荐
Prototype Object对象 学习
Jul 12 Javascript
JQuery 将元素显示在屏幕的中央的代码
Feb 27 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
Jul 21 Javascript
node.js下LDAP查询实例分享
Sep 30 Javascript
jQuery基于扩展实现的倒计时效果
May 14 Javascript
简单实现jQuery轮播效果
Aug 18 jQuery
微信小程序上传图片功能(附后端代码)
Jun 19 Javascript
Vue封装的可编辑表格插件方法
Aug 28 Javascript
Vue实现类似Spring官网图片滑动效果方法
Mar 01 Javascript
Vue登录主页动态背景短视频制作
Sep 21 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
Nov 15 Javascript
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
网页前台通过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上传图片、删除图片实现代码
2010/05/12 PHP
PHP的全局错误处理详解
2016/04/25 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
javascript面向对象编程代码
2011/12/19 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
浅谈Vue.js
2017/03/02 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
详解Vue-cli代理解决跨域问题
2017/09/27 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
Python 性能优化技巧总结
2016/11/01 Python
Python机器学习之决策树算法
2017/12/22 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
代码实例讲解python3的编码问题
2019/07/08 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
医院门卫岗位职责
2013/12/30 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
自主招生专家推荐信
2015/03/26 职场文书
党支部工作总结2015
2015/04/01 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
Mysql文件存储图文详解
2021/06/01 MySQL
Python 全局空间和局部空间
2022/04/06 Python
Python读取和写入Excel数据
2022/04/20 Python