js代码如下:
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
      window.onload = function () {
          func(tag,theclass); //这行会报错 tag 未定义
      }  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}
addLoadEvent这个函数的作用是给window.onload事件添加多个函数 可是问题在于如果我要执行的函数有多个参数的话怎么办?比如我要传递的函数是类似于这样子的: styleHeaderSiblings(tag, theclass)
 在addLoadEvent中改成用func(tag,theclass) 结果会报错 应该怎么写才对?window.onlaod

解决方案 »

  1.   

    window.onload事件驱动的,是由浏览器触发由它指定传回的参数 比如一般是事件的第一个参数是 Event对象func(tag,theclass); //这行会报错 tag 未定义
    这样的你可以写成全局变量 tag,theclass
      

  2.   

    tag,theclass这两个变量声明了吗?
      

  3.   

    问题是addLoadEvent这个函数的参数是一个函数的名称 这个函数可能有参数,也可能无参数 我该怎么写呢?
      

  4.   

    我要把一个函数的名称作为参数传递给addLoadEvent函数  那在调用时就可以写成这样 addLoadEvent(styleHeaderSiblings); 其中styleHeaderSiblings是一个函数 现在的问题是当styleHeaderSiblings有参数时怎么传递给addLoadEvent?
      

  5.   

    两种,一种是增加参数
    function addLoadEvent(func,param) {
    func(param);...
    第二种是定义全局变量
    var param={};
    function addLoadEvent(func) {
    func(param);...
      

  6.   

    你看下面这样可以不? function addLoadEvent(func) {
     var oldonload = window.onload;  
      if (typeof window.onload != 'function') {
      window.onload = function () {
      func.fn.apply(this , func.args); //这行会报错 tag 未定义
      } 
      } else {
    window.onload = function() {
    oldonload();
    func.fn.apply(this , func.args);
    }
    }
    }

    function oneParaFn(name){
    alert(name);
    }
    function twoParaFn(name,age){
    alert(name+' '+age);
    }

    addLoadEvent({
    fn : oneParaFn ,/*函数*/
    args : ['admin']/*参数*/
    });
    addLoadEvent({
    fn : twoParaFn ,/*函数*/
    args : ['john',23]/*参数*/
    });
      

  7.   

    试着改成了这样 function addLoadEvent(func,param) {
      var oldonload = window.onload;
      if (typeof window.onload != 'function') {
          window.onload = function () {
              func(param);
          }  } else {
        window.onload = function() {
          oldonload();
          func();
        }
      }
    }
    这样调用: addLoadEvent(styleHeaderSiblings("h1","intro")); 报错 func is not a function 改为 addLoadEvent(styleHeaderSiblings("h1")); 也报同样的错误
      

  8.   

     addLoadEvent(styleHeaderSiblings,"h1"); 
    参数变成数组或者对象
    [//第一个参数,//第二个参数...]
    或者
    {
      h:"h1",
      flag:"intro"
    }
      

  9.   


    styleHeaderSiblings函数的代码是这样的
    function styleHeaderSiblings(tag,theclass) {
        var headers = document.getElementsByTagName(tag);
        for (var i = 0; i < headers.length; i++) {
            var elem = getNextElement(headers[i].nextSibling);
            addClass(elem, theclass);
        }
    }
    应该怎么改?
      

  10.   

    var param={};
    param.tag = tag;
    param.theclass = theclass;
     addLoadEvent(styleHeaderSiblings,param); 
    然后
    function styleHeaderSiblings(tag,theclass) {
        var headers = document.getElementsByTagName(tag);
        for (var i = 0; i < headers.length; i++) {
            var elem = getNextElement(headers[i].nextSibling);
            addClass(elem, theclass);
        }
    }
    改成
    function styleHeaderSiblings(param) {
        var headers = document.getElementsByTagName(param.tag);
        for (var i = 0; i < headers.length; i++) {
            var elem = getNextElement(headers[i].nextSibling);
            addClass(elem, param.theclass );
        }
    }
      

  11.   

    function addLoadEvent(func){
    if(window.addEventListener){
    window.addEventListener("load",func,false);
    }else if(window.attachEvent){
    window.attachEvent("onload",func);
    }
    }addLoadEvent(function(){
    alert(789)
    });
      

  12.   


    代码如下 var param = {};
    param.tag = tag;
    param.theclass = theclass;
    function addLoadEvent(func,param) {
      var oldonload = window.onload;
      if (typeof window.onload != 'function') {
          window.onload = function () {
              func(param);
              
          }  } else {
      window.onload = function () {
          oldonload();
          
          func(param);
      }
      }
    }
    会报错tag未定义  styleHeaderSiblings这个函数是写在另一个Js文件中的 我是在另一个js文件中调用addLoadEvent(styleHeaderSiblings,param)
      

  13.   

    param.tag = tag;//传参前给tag赋值

    var tag ="1";
    param.tag = tag;
      

  14.   

    你的问题 刚好是我遇到的   不过问题我能解决,只是方法不好  用匿名函数调用。
    window.onload = function () {
        addLoadEvent(styleElementSibling("h1", "intro"));
    }
    不用addLoadEvent这个方法。