首页 新闻 会员 周边

addEventHandler方法中如何让this起作用,并能兼容各浏览器

0
悬赏园豆:10 [已解决问题] 解决于 2012-07-21 14:08
 function addEventHandler(oTarget, sEventType, fnHandler) {
if (oTarget.addEventListener) {
oTarget.addEventListener(sEventType, fnHandler, false);
} else if (oTarget.attachEvent) {
oTarget.attachEvent("on" + sEventType, fnHandler);
} else {
oTarget["on" + sEventType] = fnHandler;
}
};


我用这个方法给好几个标签绑定事件。
for(var i=0;i<10;i++)
{
var o=document.createElement("span");
o.setAttrbute("data",i);
addEventHandler(o,"click",function(){
alert(this.getAttribute("data"));
});
}


在chrome中 这样写实可以用的 但是在IE下 就不行了 这是为什么啊 
豆腐欣欣的主页 豆腐欣欣 | 初学一级 | 园豆:76
提问于:2012-02-25 19:16
< >
分享
最佳答案
0

参考:http://www.quirksmode.org/blog/archives/2005/08/addevent_consid.html

还有:http://dean.edwards.name/weblog/2005/10/add-event/

一般通过event参数的target/srcElement来获取当前元素:

    addEvent(el,"click",function (e) {
//this.className = '';
var node = (e) ? e.target : window.event.srcElement;
node.className = '';
});
收获园豆:5
_A_A | 小虾三级 |园豆:1139 | 2012-02-25 20:19
其他回答(1)
0
if(!('bind'inFunction.prototype)){
   
Function.prototype.bind=function(owner){
       
var that=this;
       
var args=Array.prototype.slice.call(arguments,1);
       
returnfunction(){
           
return that.apply(owner,
                args
.length===0? arguments : arguments.length===0? args :
                args
.concat(Array.prototype.slice.call(arguments,0))
           
);
       
};
   
};
}
收获园豆:5
码尔代夫iimax | 园豆:3138 (老鸟四级) | 2012-02-25 22:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册