Chrome / jQuery Uncaught RangeError: превышен максимальный размер стека вызовов
Я получаю сообщение об ошибке "Uncaught RangeError: максимальный размер стека вызовов превышен" на chrome. вот моя функция jQuery
$('td').click(function () {
if ($(this).context.id != null && $(this).context.id != '') {
foo($('#docId').val(), $(this).attr('id'));
}
return false;
});
обратите внимание, что на странице есть десятки тысяч ячеек. Однако я обычно связываю переполнения стека с рекурсией, и в этом случае, насколько я вижу, их нет.
создает ли создание лямбды, как это автоматически генерирует нагрузку материала на стеке? есть ли способ обойти это?
на данный момент единственное решение, которое у меня есть, - это явно генерировать события onclick в каждой ячейке при рендеринге HTML, что делает HTML намного больше.
6 ответов:
поскольку" на странице есть десятки тысяч ячеек", привязка события click к каждой отдельной ячейке вызовет ужасную проблему с производительностью. Есть лучший способ сделать это, то есть привязать событие щелчка к телу, а затем выяснить, был ли элемент ячейки целью щелчка. Вот так:
$('body').click(function(e){ var Elem = e.target; if (Elem.nodeName=='td'){ //.... your business goes here.... // remember to replace $(this) with $(Elem) } })
этот метод будет не только выполнять вашу задачу с собственным тегом "td", но и с более поздним добавлением "td". Я думаю, что вы будете заинтересованы в этой статье о событие привязка и делегирование
или вы можете просто использовать ".on ()" метод jQuery с тем же эффектом:
$('body').on('click', 'td', function(){ ... });
вы также можете получить эту ошибку, когда у вас есть бесконечный цикл. Убедитесь, что у вас нет бесконечных рекурсивных ссылок на себя.
мой был больше ошибкой, что произошло, был щелчок по циклу(я думаю) в основном, нажав на логин, на который также был нажат родитель, что в конечном итоге привело к превышению максимального размера стека вызовов.
$('.clickhere').click(function(){ $('.login').click(); }); <li class="clickhere"> <a href="#" class="login">login</a> </li>
эта проблема произошла со мной, когда я использовал jQUery Fancybox внутри веб-сайта со многими другими плагинами jQuery. Когда я использовал лайтбокс (здесь) вместо Fancybox, проблема ушла.
недавно я тоже столкнулся с этой проблемой. У меня был очень большой стол в dialog div. Это было >15 000 строк. Когда.пустой () был вызван на dialog div, я получал сообщение об ошибке выше.
Я нашел круглое решение, где перед вызовом очистки диалогового окна я бы удалил все остальные строки из очень большой таблицы, а затем вызвал .пустой.)( Казалось, хотя работает. Кажется, что моя старая версия jQuery не может обрабатывать такие большие элементы.