diff --git a/src/js/utils/events.js b/src/js/utils/events.js index 9ea9272f284a07..2d2af977607404 100644 --- a/src/js/utils/events.js +++ b/src/js/utils/events.js @@ -1,22 +1,30 @@ module.exports = { - - once: function (el, type, callback) { - var typeArray = type.split(' '); - - for (var i = typeArray.length - 1; i >= 0; i--) { - el.addEventListener(typeArray[i], function(e) { - e.target.removeEventListener(e.type, arguments.callee); - return callback(e); - }); - }; - }, - - on: function(el, type, callback, capture) { - el.addEventListener(type, callback, capture || false); - }, - - off: function(el, type, callback, capture) { - el.removeEventListener(type, callback, capture || false); - } - -} \ No newline at end of file + once: function(el, type, callback) { + var typeArray = type.split(' '); + var recursiveFunction = function(e){ + e.target.removeEventListener(e.type, recursiveFunction); + return callback(e); + }; + for(var i = typeArray.length - 1; i > 0; i--) { + on(el, typeArray[i], recursiveFunction); + } + }, + // IE8+ Support + on: function(el, type, callback) { + if(el.addEventListener) { + el.addEventListener(type, callback); + } else { + el.attachEvent('on' + type, function() { + callback.call(el); + }); + } + }, + // IE8+ Support + off: function(el, type, callback) { + if(el.removeEventListener) { + el.removeEventListener(type, callback); + } else { + el.detachEvent('on' + type, callback); + } + } +}; \ No newline at end of file