如果您正在使用jQuery,则无需进行任何特殊操作。通过$(document).ready()
添加的处理程序不会相互覆盖,而是按顺序执行:
$(document).ready(func1)
...
$(document).ready(func2)
如果您没有使用 jQuery,您可以使用 Karaxuna 演示的
addEventListener
,再加上适用于 IE<9 的
attachEvent
。
请注意,
onload
与
$(document).ready()
不等价 - 前者也会等待 CSS、图像等内容加载完成,而后者仅等待 DOM 树。现代浏览器(自 IE9 开始)支持文档上的
DOMContentLoaded
事件,它对应于 jQuery 的
ready
事件,但 IE<9 不支持。
if(window.addEventListener){
window.addEventListener('load', func1)
}else{
window.attachEvent('onload', func1)
}
...
if(window.addEventListener){
window.addEventListener('load', func2)
}else{
window.attachEvent('onload', func2)
}
如果没有这两个选项可用(例如,您没有处理DOM节点),您仍然可以这样做(我使用
onload
作为示例,但其他选项也适用于
onload
):
如果没有可用的这两个选项(例如,您没有处理DOM节点),您仍然可以这样做(我以onload
为例,但其他选项也是适用于onload
):
var oldOnload1=window.onload;
window.onload=function(){
oldOnload1 && oldOnload1();
func1();
}
...
var oldOnload2=window.onload;
window.onload=function(){
oldOnload2 && oldOnload2();
func2();
}
或者,为了避免污染全局命名空间(以及可能遇到命名空间冲突),可以使用导入/导出IIFE模式:
window.onload=(function(oldLoad){
return function(){
oldLoad && oldLoad();
func1();
}
})(window.onload)
...
window.onload=(function(oldLoad){
return function(){
oldLoad && oldLoad();
func2();
}
})(window.onload)