下面是一些基本函数:
function addEvent(obj,type,fn){
    if(obj.addEventListener){
        obj.addEventListener(type,fn,false);
    }
    else if(obj.attachEvent){
        obj["e"+type+fn]=fn;
        obj[type+fn]=function(){obj["e"+type+fn](window.event);}
        obj.attachEvent("on"+type,obj[type+fn]);
    }   
    else{
        obj["on"+type]=obj["e"+type+fn];
    }
}
function trim(str){
    return str.replace(/^\s+|\s+$/g,"");
}
function testIe(){
    s=navigator.userAgent.toLowerCase();
    o=/msie/.test(s)&&!/opera/.test(s);
    return o;
}
function hasClass(obj,classname){
    obj=$(obj);
    if(!obj||!classname||!obj.className){
        return false;
    }
    return (" "+obj.className+" ").indexOf(" "+classname+" ")>-1;
}
function addClass(obj,classname){
    obj=$(obj);
    if(!obj||!classname){
        return
    }
    if(this.hasClass(obj,classname)){
        return
    }
    obj.className+=" "+classname;
}
function removeClass(obj,classname){
    obj=$(obj);
    if(!this.hasClass(obj,classname)){
         return
    }
    obj.className=obj.className.replace(new RegExp(classname,"g"),"");
    if(!this.trim(obj.className)){
        obj.removeAttribute(testIe()?"className":"class");
    }
}
现在我想在页面为id="menu"动态添加和移除css类
var obj=$('menu');
addEvent(obj,'mouseover',addClass(obj,classname));
addEvent(obj,'moouseout',removeClass(obj,classname));
问题出在:页面刚加载进去,没有触发事件,就已经添加了classname
求高手指教!小弟感谢万分

解决方案 »

  1.   

    不会这样!你看看你的html ,是否就加了class !
      

  2.   

    没有加啊,而且就算我把mouseover改为click也会出现这种情况,就像是在load时就出发了事件,我在想是不是自己的addEvent函数有问题
      

  3.   

    有一点你要搞清楚:addClass(obj,classname) 这是在执行。addClass or function() {addClass(obj,classname)}  这才是将方法作为参数进行传递
      

  4.   

        
       同意这种看法!
      
       addEvent(obj,'mouseover',function(){alert(3)}); //匿名警告3
       改为这样试试,如果鼠标放到obj上能警告3,说明你的addEvent没有问题!
       按照这个道理修改你的代码就是:
       addEvent(obj,'mouseover',function(){addClass(obj,classname)});
        这样试下不知道可以吗?
      

  5.   

    还有一种可能,就是他的函数执行早于id="mune"的html标签的出现没有页面内容,不敢妄加判断
      

  6.   

    addEvent(obj,'mouseover', (function(obj, classname) {addClass(obj,classname)}) (obj, classname));ORaddEvent(obj,'mouseover', function(obj, classname) {addClass(obj,classname)});上面一种利用闭包更加保险些。。
      

  7.   

      这个情况不需要再闭包了吧!
      addEvent(obj,'mouseover',function(){addClass(obj,classname)});
      红色体本身就已经是一个匿名函数了,还闭包?,那不如刚催把函数名addClass也去掉,直接把函数addClass定义到addEvent里来好了!
      

  8.   

     呵呵,不好意思,我误解你的意思,你的写法确实更好!addClass是有带参数地!