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

使用addEventListener添加事件时如何传递数据?

使用addEventListener添加事件时如何传递数据?

FFIVE 2018-09-07 14:14:21
我想在DOM元素绑定事件时顺便能传一些值给回调函数;我使用的方法是:这样可以实现参数的,但是在用到bindFunction函数时出现一个问题,就是他返回的是一个匿名函数,造成添加给dom元素的是一个匿名函数而不是那个函数名,这样就导致事件移除不了。后来我想了一个解决方法就是在bindFunction函数中存储起这个匿名函数,移除时就能指定到了,于是改造了一下bindFunction这个函数,然后移除的时候我就可以这样似乎可以解决掉问题,不过总感觉这种方法好像不是很好,还有什么好的方法进行传数据的吗,在绑定事件时。
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

我觉得这样可能更简单一些,绑定事件时返回一个用来解绑的函数,需要解绑时就直接调用它,就可以了。

function addEvent(element,type,fn,data,_this){

    _this = _this ? _this : element;

    var bound = bindFunction(_this,fn,data);

    if(element.addEventListener){

        element.addEventListener(type,bound,false);

    }else if(element.attachEvent){

        element.attachEvent('on'+type,bound);

    }else{

        element['on'+type] = fn.apply(_this,[arguments,data]);

    }

    return function(){

        if(element.removeEventListener){

            element.removeEventListener(type,bound,false);

        }else if(element.attachEvent){

            element.detachEvent('on'+type,bound);

        }else{

            element['on'+type] = null;

        }

    };

}


//绑定

var unbinder = addEvent(/*此处省略*/);


//解除上面的绑定

unbinder();


查看完整回答
反对 回复 2018-10-10
  • 1 回答
  • 0 关注
  • 1096 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信