为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

绝地无双 2018-12-06 17:53:35
这是一个我看别人写的 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) } }
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

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

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

查看完整回答
反对 回复 2018-12-24
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

有点闭包的意思,这个写的有点意思。写这段代码人,对JavaScript有一定认识啊
查看完整回答
反对 回复 2018-12-24
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

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

查看完整回答
反对 回复 2018-12-24
  • 3 回答
  • 0 关注
  • 435 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号