代码如下:
<div id="div1" style="background:yellow; height:100px; width:100px"></div>
var box=document.getElementById('div1');
function addEvent(el,type,fn){  
if(window.addEventListener) {
el.addEventListener(type,fn,false);
}
else if(window.attachEvent)  {
el.attachEvent('on'+type,fn);
}
else{
el['on'+type]=fn;
}   
}addEvent(box,'click',f1);
addEvent(box,'click',f2);function f1(){
   alert('here')
   alert(this.id)
   alert(this)
}function f2(){
   alert('there')
   alert(this.id)
   alert(this)
}

解决方案 »

  1.   

    注意顺序
    在addEvent(box,'click',f1);  和 addEvent(box,'click',f2);调用的时候,f1和f2还没定义。
      

  2.   

    改一下吧。function addEvent(el,type,fn){  
        if(window.addEventListener) {
            el.addEventListener(type,fn,false);
        }
        else if(window.attachEvent)  {
            el.attachEvent('on'+type,function(){
                  fn.call(el);
            });
        }
        else{
            el['on'+type]=fn;
        }   
    }
    这里的this本来是指向window,原理不太明白。。
      

  3.   

    原理我多少明白些 fn.call(el); call这个方法是将fn函数中的this指向传入的el, 这么写还真挺妙的