日期:2014-05-16  浏览次数:20356 次

attachEvent()监听函数里面的this指向哪里?addEventListener()里面的是正常的,这样写可不可以?
<script type="text/javascript">
function tab(){
var a_arr=document.getElementById("tabLi").getElementsByTagName("a");
    var a_sum=a_arr.length;
for(var i=0; i<a_sum; i++){
var a=i+1;
a_arr[i].index=a;
eventListener(a_arr[i]);
}
function eventListener(obj){
if(obj.attachEvent){
obj.attachEvent("onclick",liClick)
}
else if(obj.addEventListener){
   obj.addEventListener("click",liClick,false)
}
else{
return ;
}
}
function liClick(){
for(var i=0; i<a_sum; i++){
a_arr[i].className="";
document.getElementById("tab"+a_arr[i].index).className=document.getElementById("tab"+a_arr[i].index).className.toString().replace(/show/g,"");
}
this.className="now";
document.getElementById("tab"+this.index).className+=" show";
console.log(document.getElementById("tab"+this.index).className);
};
}
tab();
</script>
一个简单标签切换的效果
javascript addEventListener() attachEvent() this

------解决方案--------------------

function eventListener(obj,cb){
            if(obj.attachEvent){
                obj.attachEvent("onclick",function(){
                      cb instanceof Function && cb.call(obj,window.event);
                });
            }
            else if(obj.addEventListener){
               obj.addEventListener("click",function(event){
                     cb instanceof Function && cb.call(obj,event);
               },false);
            }
            else{
                return ;
            }
}

试试这个
------解决方案--------------------
attachEvent 的this指向的是window,而addEventListener指向的被调用的fn。
这个在js高程上提到了,有空去了解一下。