Я пытаюсь добавить событие размытия к некоторым элементам формы, которое будет запускать некоторый код для меня. После начального размытия я пытаюсь удалить слушателя из этого элемента, чтобы он не срабатывал снова.
Событие onblur работает нормально, но по какой-то причине eventListener.remove никогда не срабатывает, поэтому размытие не удаляется. Есть идеи, что я делаю не так?
ОБНОВЛЕНО на основе комментариев Линкольнка, но все еще НЕ работает в IE:
(function() {
var els = [document.getElementsByTagName('input'),
document.getElementsByTagName('select')],
eventListener = {
add: function(el, ev, fn) {
if (window.addEventListener) { // Standard
el.addEventListener(ev, fn, false);
} else if (window.attachEvent) { // IE
var iefn = function() { fn.call(el) };
el.attachEvent('on' + ev, iefn)
} else { return false };
},
remove: function(el, ev, fn) {
if (window.removeEventListener) { // Standard
el.removeEventListener(ev, fn, false)
} else if (window.detachEvent) { // IE
var iefn = function() { fn.call(el) };
el.detachEvent('on' + ev, iefn)
} else { return false };
}
},
wtFormTracker = function() {
console.log(this.name);
eventListener.remove(this, 'blur', wtFormTracker);
};
for (var i = 0, j = els.length; i < j; i++) {
for (var y = 0, z = els[i].length; y < z; y++) {
eventListener.add(els[i][y], 'blur', wtFormTracker);
}
}
})();
ОБНОВЛЕНИЕ: полностью работает во всех браузерах
(function() {
var els = [document.getElementsByTagName('input'),
document.getElementsByTagName('select')],
eventListener = {
add: function(el, ev, fn) {
if (window.addEventListener) { // Standard
el.addEventListener(ev, fn, false);
} else if (window.attachEvent) { // IE
el.attachEvent('on' + ev, fn)
} else { return false };
},
remove: function(el, ev, fn) {
if (window.removeEventListener) { // Standard
el.removeEventListener(ev, fn, false)
} else if (window.detachEvent) { // IE
el.detachEvent('on' + ev, fn)
} else { return false };
}
},
wtFormTracker = function(el) {
var target = el.target || el.srcElement;
console.log("'WT.ti','title-of-page','WT.ac', " + target.name);
eventListener.remove(target, 'blur', wtFormTracker);
};
for (var i = 0, j = els.length; i < j; i++) {
for (var y = 0, z = els[i].length; y < z; y++) {
eventListener.add(els[i][y], 'blur', wtFormTracker);
}
}
})();