下面是一些基本函数:
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
求高手指教!小弟感谢万分
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
求高手指教!小弟感谢万分
同意这种看法!
addEvent(obj,'mouseover',function(){alert(3)}); //匿名警告3
改为这样试试,如果鼠标放到obj上能警告3,说明你的addEvent没有问题!
按照这个道理修改你的代码就是:
addEvent(obj,'mouseover',function(){addClass(obj,classname)});
这样试下不知道可以吗?
addEvent(obj,'mouseover',function(){addClass(obj,classname)});
红色体本身就已经是一个匿名函数了,还闭包?,那不如刚催把函数名addClass也去掉,直接把函数addClass定义到addEvent里来好了!