2016-12-20 3 views
1

Я добавляю div, содержащий вход для выбора, но когда я пытаюсь инициализировать select2 на нем, я получаю эту ошибку, и моя страница не отвечает, пока я не это совсем.Максимальный размер стека вызовов при использовании select2 в добавленных полях выбора

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

Ошибка консоли.

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 Если бы вы сказали нам, как выглядит код метода .select2() '? – therobinkim

+0

select2 - это библиотека для выбора полей. Все, что я делаю, это включить его в мое приложение и использовать его. Когда я использую его в статических полях, он работает отлично. –

+2

Когда вы запускаете экземпляр select2, тонна вещей добавляется в DOM, событие DOMNodeInserted запускается, тогда у вас есть бесконечный цикл. – vothaison

ответ

1

При инициализации в ВЫБ.2 экземпляр, тонны вещей добавляются события DOM, DOMNodeInserted увольняют, то у вас есть бесконечный цикл.

У меня есть 2 способа обойти это (конечно, есть более):

+1

Второй способ решил это для меня. Спасибо! –

+1

Другая идея - это буферизация события, выполняющего что-то вроде этого: 'var _my_buffer = null; $ ("# foo"). on ("bar", function() {if (! _my_buffer) {_my_buffer = setTimeout (function() {doStuff(); _my_buffer = null;}, 100);}}); ' – Greg

 Смежные вопросы

  • Нет связанных вопросов^_^