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 相关文章推荐
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
Nov 11 Javascript
利用javascript打开模态对话框(示例代码)
Jan 11 Javascript
Markdown+Bootstrap图片自适应属性详解
May 21 Javascript
jQuery使用经验小技巧(推荐)
May 31 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
Aug 24 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
Apr 19 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
May 03 Javascript
js Date()日期函数浏览器兼容问题解决方法
Sep 12 Javascript
Javascript实现异步编程的过程
Jun 18 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
Aug 15 Javascript
layui中select,radio设置不生效的解决方法
Sep 05 Javascript
帮你提高开发效率的JavaScript20个技巧
Jun 18 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(1)
2006/10/09 PHP
PHP多线程抓取网页实现代码
2010/07/22 PHP
PHP源代码数组统计count分析
2011/08/02 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
yii2 数据库读写分离配置示例
2017/02/10 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
使用Python对Access读写操作
2017/03/30 Python
python使用opencv读取图片的实例
2017/08/17 Python
python中for用来遍历range函数的方法
2018/06/08 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
python爬虫增加访问量的方法
2019/08/22 Python
基于python进行抽样分布描述及实践详解
2019/09/02 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
python不同系统中打开方法
2020/06/23 Python
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
创业计划书撰写原则
2014/01/25 职场文书
行政助理的岗位职责
2014/02/18 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
介绍信如何写
2015/01/31 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python