2016-12-20 9 views
1

Ich füge ein div hinzu, das eine Auswahleingabe enthält, aber wenn ich select2 darauf initialisiere, erhalte ich diesen Fehler und meine Seite reagiert erst, wenn ich forciere ziemlich es.Die maximale Callstackgröße wurde überschritten, wenn select2 bei angehängten Auswahlfeldern verwendet wurde.

$('.page-content').on('DOMNodeInserted', '.material-container', function() { 
    var selectField = $(this).find(".select-material"); 
    selectField.select2(); 
}); 

Hier ist der Konsolenfehler.

jquery.js?27d9:5946 Uncaught RangeError: Maximum call stack size exceeded. 
at HTMLSelectElement.eval (eval at <anonymous> (http://crm.dev:3000/js/vendor.js:71:1), <anonymous>:5946:21) 
at domManip (eval at <anonymous> (http://crm.dev:3000/js/vendor.js:71:1), <anonymous>:5759:14) 
at jQuery.fn.init.after (eval at <anonymous> (http://crm.dev:3000/js/vendor.js:71:1), <anonymous>:5944:10) 
at jQuery.fn.init.jQuery.fn.(anonymous function) [as insertAfter] (eval at <anonymous> (http://crm.dev:3000/js/vendor.js:71:1), <anonymous>:6052:37) 
at Select2._placeContainer (eval at <anonymous> (http://crm.dev:3000/js/vendor.js:163:1), <anonymous>:5137:16) 
at new Select2 (eval at <anonymous> (http://crm.dev:3000/js/vendor.js:163:1), <anonymous>:5063:10) 
at HTMLSelectElement.eval (eval at <anonymous> (http://crm.dev:3000/js/vendor.js:163:1), <anonymous>:5667:26) 
at Function.each (eval at <anonymous> (http://crm.dev:3000/js/vendor.js:71:1), <anonymous>:368:19) 
at jQuery.fn.init.each (eval at <anonymous> (http://crm.dev:3000/js/vendor.js:71:1), <anonymous>:157:17) 
at jQuery.fn.init.$.fn.select2 (eval at <anonymous> (http://crm.dev:3000/js/vendor.js:163:1), <anonymous>:5664:14) 
at HTMLDivElement.eval (eval at <anonymous> (http://crm.dev:3000/js/app.js:149:1), <anonymous>:51:17) 
+0

Wou Ist es hilfreich, wenn Sie uns sagen, wie der Code der '.select2()' Methode aussieht? – therobinkim

+0

select2 ist eine Bibliothek zum Auswählen von Feldern. Alles, was ich tue, ist es in meine App aufzunehmen und es zu benutzen. Wenn ich es auf statischen Feldern verwende, funktioniert es gut. –

+2

Wenn Sie eine select2-Instanz initiieren, werden viele Dinge zum DOM hinzugefügt, das DOMNodeInserted-Ereignis wird ausgelöst, dann haben Sie eine Endlosschleife. – vothaison

Antwort

1

Wenn Sie eine select2 Instanz init, Tonne Dinge des DOM, DOMNodeInserted Fall, dass Sie eine Endlosschleife wird ausgelöst wird dann haben.

Ich habe 2 Möglichkeiten, dies (natürlich gibt es mehr) zu umgehen:

+1

Der zweite Weg löste es für mich. Vielen Dank! –

+1

Eine andere Idee ist es, das Ereignis zu puffern, das so etwas macht: 'var _my_buffer = null; $ ("# foo"). on ("bar", function() {if (! _my_buffer) {_my_buffer = setTimeout (function() {doStuff(); _my_buffer = null;}, 100);}}); ' – Greg

Verwandte Themen