我将此代码用作侦听器的包装函数,当我删除侦听器时,我想执行回调-我必须使用此“ callback()”,而不仅仅是removeEventListener回调参数中的回调。有人可以看看我在做什么吗
当我认为应该只是 el.removeEventlistener(事件,回调,捕获)
但是这可以代替我认为是错误的 el.removeEventlistener(event,callback(),capture)
已更新:
var evts = (function () {
'use strict';
var listeners = [],
add,
remove;
add = function (evt, elem, fn, capture) {
var callback = function (evt) {
fn.call(elem, evt, evt && evt.target ? evt.target : window.event.srcElement);
};
listeners.push({
evt: evt,
elem: elem,
fn: fn,
callback: callback,
capture, capture,
removed: false
});
if (elem.addEventListener) {
elem.addEventListener(evt, callback, capture);
} else if (elem.attachEvent) {
elem.attachEvent('on' + evt, callback, capture);
} else {
elem['on' + evt] = callback;
}
};
remove = function (evt, elem, fn, capture) {
var callback = function (evt) {
fn.call(elem, evt, evt && evt.target ? evt.target : window.event.srcElement);
};
callback();
listeners.forEach(function (obj, i) {
if (obj.evt === evt && obj.elem === elem &&
!obj.removed) {
obj.removed = true;
callback = obj.callback;
listeners.splice(i, 1);
}
});
if (elem.removeEventListener) {
elem.removeEventListener(evt, callback, capture);
} else if (elem.detachEvent) {
elem.detachEvent('on' + evt, callback, capture);
} else {
elem['on' + evt] = null;
}
};
return {
add: add,
remove: remove
};
}());