Skip to content

Commit 7b66284

Browse files
authored
Merge pull request #6 from shystruk/dev
remove multiple event listeners
2 parents 03ab928 + f691087 commit 7b66284

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"name": "custom-event-js",
3-
"version": "1.0.2",
3+
"version": "1.0.3",
44
"license": "MIT",
55
"description": "Custom Event Dispatcher",
6-
"main": "./src/custom-event-js.js",
6+
"main": "./src/custom-event.js",
77
"directories": {
88
"src": "src"
99
},

src/custom-event-js.js renamed to src/custom-event.js

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1+
// Internet Explorer 9 and higher
12
_CustomEventPolyfill();
23

3-
var TARGET = document;
4-
var EVENTS = {};
4+
const TARGET = document;
5+
const EVENTS = {};
56

67
/**
78
* @param {String} eventName
89
* @param {Object} detail
910
*/
1011
function _dispatchEvent(eventName, detail) {
11-
var event = new CustomEvent(eventName, {
12+
const event = new CustomEvent(eventName, {
1213
detail: detail
1314
});
1415

@@ -21,7 +22,7 @@ function _CustomEventPolyfill() {
2122
}
2223

2324
function CustomEvent(event, params) {
24-
var evt = document.createEvent('CustomEvent');
25+
const evt = document.createEvent('CustomEvent');
2526

2627
params = params || { bubbles: false, cancelable: false, detail: undefined };
2728
evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
@@ -39,15 +40,29 @@ module.exports = {
3940
* @param {Function} callback
4041
*/
4142
on: function (eventName, callback) {
42-
EVENTS[eventName] = callback;
43+
if (EVENTS[eventName]) {
44+
EVENTS[eventName].callbacks.push(callback);
45+
} else {
46+
EVENTS[eventName] = {
47+
callbacks: [callback]
48+
};
49+
}
50+
4351
TARGET.addEventListener(eventName, callback);
4452
},
4553

4654
/**
4755
* @param {String} eventName
4856
*/
4957
off: function (eventName) {
50-
TARGET.removeEventListener(eventName, EVENTS[eventName]);
58+
if (!EVENTS[eventName]) {
59+
return;
60+
}
61+
62+
EVENTS[eventName].callbacks.forEach(callback => {
63+
TARGET.removeEventListener(eventName, callback);
64+
});
65+
5166
delete EVENTS[eventName];
5267
},
5368

0 commit comments

Comments
 (0)