From 378c6dbafa4f9fa265478bdf259b33f8fd753154 Mon Sep 17 00:00:00 2001 From: Josh Johnson Date: Sat, 22 Oct 2016 20:15:28 +0100 Subject: [PATCH] Resolve init/destroy bug --- assets/scripts/src/choices.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/assets/scripts/src/choices.js b/assets/scripts/src/choices.js index 1bcda68..d8522b3 100644 --- a/assets/scripts/src/choices.js +++ b/assets/scripts/src/choices.js @@ -120,6 +120,7 @@ class Choices { this.currentValue = ''; // Retrieve triggering element (i.e. element with 'data-choice' trigger) + this.element = element; this.passedElement = isType('String', element) ? document.querySelector(element) : element; if (!this.passedElement) { @@ -233,17 +234,24 @@ class Choices { // Reinstate passed element this.passedElement.classList.remove(this.config.classNames.input, this.config.classNames.hiddenState); - this.passedElement.tabIndex = ''; + this.passedElement.removeAttribute('tabindex'); this.passedElement.removeAttribute('style', 'display:none;'); this.passedElement.removeAttribute('aria-hidden'); + this.passedElement.removeAttribute('data-choice', 'active'); - this.containerOuter.outerHTML = this.passedElement.outerHTML; + // Re-assign values - this is weird, I know + this.passedElement.value = this.passedElement.value; - // Nullify stores - this.passedElement = null; - this.userConfig = null; - this.config = null; - this.store = null; + // Move passed element back to original position + this.containerOuter.parentNode.insertBefore(this.passedElement, this.containerOuter); + // Remove added elements + this.containerOuter.parentNode.removeChild(this.containerOuter); + + // Clear data store + this.clearStore(); + + // Nullify instance-specific data + this.config.templates = null; // Uninitialise this.initialised = false; @@ -367,8 +375,10 @@ class Choices { // Only render if our state has actually changed if (this.currentState !== this.prevState) { // Choices - if (this.currentState.choices !== this.prevState.choices || this.currentState.groups !== this.prevState.groups) { - if (this.passedElement.type === 'select-multiple' || this.passedElement.type === 'select-one') { + if (this.currentState.choices !== this.prevState.choices || + this.currentState.groups !== this.prevState.groups) { + if (this.passedElement.type === 'select-multiple' || + this.passedElement.type === 'select-one') { // Get active groups/choices const activeGroups = this.store.getGroupsFilteredByActive(); const activeChoices = this.store.getChoicesFilteredByActive(); @@ -1204,7 +1214,7 @@ class Choices { } /** - * Destroy event listeners + * Remove event listeners * @return * @private */