8.7w+
社区成员
function addEvent(node,type,listener){
//使用前面的方法检查兼容性保证平稳退化
if (!isCompatible()) { return false; }
if (!(node = $(node))) { return false; }
if (node.addEventListener){
//W3C的方法
node.addEventListener(type, listener, false);
return true;
}else if(node.attachEvent){
//MSIE的方法
node['e'+type+listener]=listener; //?
node[type+listener]=function(){ //?
node['e'+type+listener] (window.event); //?
}
node.attachEvent('on'+type , node[type+listener] );
return true;
}
//若两种方法都不具备
return false;
}
node['e'+type+listener]=listener; //?
node[type+listener]=function(){ //?
node['e'+type+listener] (window.event); //?
}
<input type="button" value="test1" id="b1">
<input type="button" value="test2" id="b2">
<script type="text/javascript">
window['name'] = 'window';
var s = {'name': 's'};
s['fn'] = function(){alert(this.name)};
document.getElementById('b1').attachEvent('onclick', function() {s['fn']()});
document.getElementById('b2').attachEvent('onclick', s.fn);
//你獲兩個按鈕按下后,alert出來的是什麽
</script>
可以看看下面的文章,文章最后提到的問題就是用上面的代碼邏輯來解決的
http://www.jb51.net/article/16863.htm
attach("onclick", function(e){
var e = e||window.event;
this = e.srcElement || e.target;
})
function addEvent(node,type,listener){
//使用前面的方法检查兼容性保证平稳退化
if (!isCompatible()) { return false; }
if (!(node = $(node))) { return false; }
if (node.addEventListener){
//W3C的方法
node.addEventListener(type, listener, false);
return true;
}else if(node.attachEvent){
//MSIE的方法
/* node['e'+type+listener]=listener; //?
node[type+listener]=function(){ //?
node['e'+type+listener] (window.event); //?
}*/
node.attachEvent('on'+type , listener);
return true;
}
//若两种方法都不具备
return false;
}
DOM.onxxxevnet=function(e){
e=e||window.event;//////////////////////////这种方式添加的事件e参数为null,ie要使用window.event获取事件对象
}