首页 新闻 会员 周边

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

0
悬赏园豆:5 [已解决问题] 解决于 2012-06-18 07:57

这是一个我看别人写的

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)
           }
}
unbreakable的主页 unbreakable | 初学一级 | 园豆:111
提问于:2012-06-09 18:09
< >
分享
最佳答案
0

不得不说, 写这代码的人也太喜欢卖弄了吧, 非要写成一行. 写通俗点可以是这样:

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 都很正常, 也许是我没注意吧.

收获园豆:5
jsckdao | 菜鸟二级 |园豆:207 | 2012-06-15 00:23

昨天我刚弄明白!原来他包裹了一层用元素再去调用方法!还是挺感谢你的!

unbreakable | 园豆:111 (初学一级) | 2012-06-18 07:56
其他回答(1)
0
有点闭包的意思,这个写的有点意思。写这段代码人,对JavaScript有一定认识啊
船长&CAP | 园豆:318 (菜鸟二级) | 2012-06-09 20:03

这个闭包貌似没关系吧?他只是如果没有addEventListener方法,就给oElement添加一个属性,然后把处理方法赋值给这个属性,然后绑定事件的时候关联这个属性。。这只是我的个人认为,我是菜鸟,看不出有什么好处。

支持(0) 反对(0) 俗人... | 园豆:83 (初学一级) | 2012-06-11 11:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册