这是一个我看别人写的
var EventUtil = { addHandler: function (oElement, sEvent, fnHandler) { oElement.addEventListener ? oElement.addEventListener(sEvent, fnHandler, false) : (oElement["_" + sEvent + fnHandler] = fnHandler, oElement[sEvent + fnHandler] = function () {oElement["_" + sEvent + fnHandler]()}, oElement.attachEvent("on" + sEvent, oElement[sEvent + fnHandler])) } }
但感觉好像也不用这么麻烦呀!请问他这么写避免了那些问题或者好处是什么,那么下面是我写的
var EventUtil={ addHandler:function(oElement,sEvent,fnHandler){ oElement.addEventListener ? oElement.addEventListener(sEvent,fnHandler,false) : oElement.attachEvent("on"+sEvent,fnHandler) } }
不得不说, 写这代码的人也太喜欢卖弄了吧, 非要写成一行. 写通俗点可以是这样:
var EventUtil = {
addHandler: function(oElement, sEvent, fnHandler){
if(oElement.addEventListener){
oElement.addEventListener(sEvent, fnHandler, false);
}
else{
oElement['__'+ sEvent] = fnHandler;
oElement.attachEvent('on'+ sEvent, function(evt){
oElement['__'+ sEvent](evt);
});
}
}
}
他首先把要注册的侦听器作成DOM元素的一个方法, 然后当事件触发后用该 DOM元素调用这个方法, 我猜应该是解决ie中事件侦听器中的 this 指向的问题, 按理说事件触发后, 侦听器中的 this 是指向事件触发那个 DOM 元素的, 也许在IE 以前的某个古老的版本中 侦听器中的 this 是乱指向的.
这是我的猜测, 没有具体实验, 我在工作中还没遇到过这种情况, 现在的ie 都很正常, 也许是我没注意吧.
昨天我刚弄明白!原来他包裹了一层用元素再去调用方法!还是挺感谢你的!
有点闭包的意思,这个写的有点意思。写这段代码人,对JavaScript有一定认识啊
这个闭包貌似没关系吧?他只是如果没有addEventListener方法,就给oElement添加一个属性,然后把处理方法赋值给这个属性,然后绑定事件的时候关联这个属性。。这只是我的个人认为,我是菜鸟,看不出有什么好处。