2016-04-19 10 views
1

Ich benutze select2 Version 4.0.2 (rc1) Was ich sehe, ist, dass bei der Verwendung von select2 mit isMultple=true, das Dropdown öffnen und dann dynamisch entfernen Sie die Auswahl aus dem DOM, der Menü klebt herum.Select2 Dropdown-Menü bleibt bestehen nach Auswahl von DOM entfernt

Sie können sehen, passiert in the select2 examples durch Fokussierung auf die Steuerung, so dass Sie die Zeitzone Optionen sehen, dann in der Konsole $('.s2-example').remove() eingeben. Die Liste der Optionen bleibt erhalten.

Bearbeiten: Oben ist ein Beispiel für das, was ich versuche zu arbeiten. Was in meinem Fall passiert ist, dass das dom manipuliert wird, um die Auswahlbox durch ein Framework so zu entfernen, dass ich mich nicht einhaken kann, bevor es passiert. Was ich versuche, ist eine Möglichkeit zu finden, auf das entfernte Element zu reagieren, in der Hoffnung, dass ich die Optionsliste manuell entfernen kann, wenn sie existiert.

Ich versuche, einen sauberen Ansatz für den Umgang damit zu finden. Ich habe versucht, in zerstören Einhaken wie so:

$("#select-2-id").on("destroy", function(){...})

aber zu zerstören scheint nicht gefeuert zu werden.

Ich habe überlegt, eine mutation observer zu verwenden, aber das fühlt sich irgendwie hacky für mich an. Könnte jemand einen besseren Weg vorschlagen, damit umzugehen? Jeder Rat würde geschätzt werden. Vielen Dank!

Antwort

1

Definitiv buried in the documentation (under adapters), aber Sie sollten die destroy Methode auf der Auswahl indem „zerstören“, um die jQuery-Objekts .select2() Methode

$(".js-example-basic-multiple").select2('destroy'); 

Dies zerstört die Instanz anrufen. Sie können dann sicher anrufen .remove()

$(".js-example-basic-multiple").select2('destroy').remove(); 
+0

Danke für die Antwort. Das hilft bei meinem Fall nicht ganz, obwohl ich denke. In meinem Fall wird die Kontrolle durch ein Framework aus dem dom entfernt, so dass ich mich nicht einklinken kann, bevor es passiert. Ich habe meine Frage bearbeitet. – TheMethod

+1

@TheMethod So können Sie nicht in es einhaken, bevor es passiert. Wenn solch eine destruktive Aktion stattfindet, kann ich keine Möglichkeit sehen, wie Sie das umgehen können, ohne einen [Mutationsbeobachter] zu verwenden (https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver). oder ein [DOM-Mutationsereignis] (http://help.dottoro.com/ljqkbipq.php), von dem der zweite stark abzuraten ist. Diese Ereignis-Listener sind veraltet. –

Verwandte Themen