diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2019-09-15 18:52:26 -0400 |
---|---|---|
committer | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2019-09-27 21:41:00 -0400 |
commit | e358c94882ba4fea134ca0a21824055d09719143 (patch) | |
tree | 04b346150f8e4973a06bf7e0c8f3ec42f69502a8 /ext/mixed/js | |
parent | 1a7ad3011109dfb9cb51b5b89740fae1cb8a7035 (diff) |
Clean up event listeners
Diffstat (limited to 'ext/mixed/js')
-rw-r--r-- | ext/mixed/js/display.js | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 2f7a694e..46016192 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -28,6 +28,7 @@ class Display { this.index = 0; this.audioCache = {}; this.optionsContext = {}; + this.eventListeners = []; this.dependencies = {}; @@ -283,6 +284,8 @@ class Display { async termsShow(definitions, options, context) { try { + this.clearEventListeners(); + if (!context || context.focus !== false) { window.focus(); } @@ -339,6 +342,8 @@ class Display { async kanjiShow(definitions, options, context) { try { + this.clearEventListeners(); + if (!context || context.focus !== false) { window.focus(); } @@ -610,8 +615,18 @@ class Display { return -1; } - addEventListeners(selector, ...args) { - this.container.querySelectorAll(selector).forEach((node) => node.addEventListener(...args)); + addEventListeners(selector, type, listener, options) { + this.container.querySelectorAll(selector).forEach((node) => { + node.addEventListener(type, listener, options); + this.eventListeners.push([node, type, listener, options]); + }); + } + + clearEventListeners() { + for (const [node, type, listener, options] of this.eventListeners) { + node.removeEventListener(type, listener, options); + } + this.eventListeners = []; } static getElementTop(element) { |