猿问

javascript高手请进,关于注册事件问题

这是一个我看别人写的

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)
           }
}
绝地无双
浏览 436回答 3
3回答

慕容森

不得不说, 写这代码的人也太喜欢卖弄了吧, 非要写成一行. 写通俗点可以是这样: 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添加一个属性,然后把处理方法赋值给这个属性,然后绑定事件的时候关联这个属性。。这只是我的个人认为,我是菜鸟,看不出有什么好处。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答