javascript addLoadEvent函数为什么在页面加载后调用的函数没有执行

 # 函数如下
function addLoadEvent(func){
    var oldonload=window.onload;
    if(typeof window.onload !='function'){
    window.onload=func;
    }
    else{
    window.onload=function(){
    oldonload();
    func();
    }
    }
}


function loadEvents() {
// home
prepareSlideshow();
// about
prepareInternalnav();
// photos
preparePlaceholder();
prepareGallery();
// live
stripeTables();
highlightRows();
displayAbbreviations();
// contact
focusLabels();
prepareForms();
}


// Load events
addLoadEvent(highlightPage);
addLoadEvent(loadEvents);


函数我可以保证没写错,我是在看javasript DOM编程艺术这边书12章编写的时候出的问题,函数没有被执行,我试过火狐断点调试,并没有看出什么错误。。

<!DOCTYPE html>


MyHtml.html
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<script type="text/JavaScript">
    alert("hello");
    function told(){
        alert("come on");
    };
    function addLoadEvent(func){
         alert("2423");
        var oldonload=window.onload;
           alert(oldonload);//为null
        if(typeof window.onload !='function'){
            window.onload=func;
            }else{
                window.onload=function(){
                oldonload();
                func();
            }
        }
    }
    function loadEvents() {
      // home
      prepareSlideshow();
      // about
      prepareInternalnav();
      // photos
      preparePlaceholder();
      prepareGallery();
      // live
      stripeTables();
      highlightRows();
      displayAbbreviations();
      // contact
      focusLabels();
      prepareForms();
    }
    //addLoadEvent(highlightPage);
    //addLoadEvent(loadEvents);

</script>


测试

测试1
测试2

我好像可以调用,通过点击按钮调用的,只是不太明白你是什么意思,是不是想要达到这样的效果。

//addLoadEvent(highlightPage);
//addLoadEvent(loadEvents);
</script>


测试


如果需要执行多个onload函数,请参考这个。

/*
* 添加window的onload触发器,避免多个onload无法执行的情况
*/
var addWinloadListener:=function (func) {
//如果没有onload,则直接赋值,不用添加监听事件
if (!window.onload) {
window.onload = func;
} else {
if (window.addEventListener) {
window.addEventListener("load", func, false);
} else if (script.attachEvent) {
window.attachEvent("onload", func);
}
}
}

如果我猜的没错,你应该是要实现传统事件绑定的覆盖问题,解决方法将以前存在的相同事件存储起来,然后先执行第一个事件,再执行第二个事件,代码如下:

window.onload = function(){
    fun();
};

if(window.onload){
    var saved = null;
    saved = window.onload;
}

window.onload = function(){
    if(saved) saved();
    fun2();
};

highlightPage函数没见你在哪里定义的,f12打开浏览器开发工具看报什么错误