Uncaught rangeerror: превышен максимальный размер стека вызовов
У меня есть сайт электронной коммерции, и я хочу, чтобы щелчок по товару отражался как на товаре, так и на корзине, привязанной в верхней части страницы. Это прекрасно работает. Я также хочу поддерживать состояние между страницами, чтобы, если сервер возвращает уже загруженную корзину, все соответствующие элементы из этой корзины на текущей странице были выбраны. Попытки "повторно выбрать" эти элементы приводят к ошибке Uncaught RangeError : превышен максимальный размер стека вызовов.
Что я уже пробовал:
Я понимаю, что интерпретатор жалуется на рекурсивный процесс попыток отменить выбор элементов корзины, повторно выбрать их в списке элементов до бесконечности. Я пытаюсь обойти это, сначала удалив все элементы корзины, например:
selectClones = function () { var retain = []; if (location.search.match(/cid=(\d+)/)) $('aside li').each((i,e) => { var e = $(e), team = e.find('span:first').text(), sel = e.find('span:last').text(), selInd = $(`th:contains(${sel})`).index(); retain.push({t: team, s: selInd}); }).remove(); for (var i = retain.length - 1; i >= 0; i--) { $(`td:contains(${retain[i].t})`).parent().children().eq(retain[i].s).trigger('click'); } }
Удивительно, но он не работает, если я не запускаю этот же фрагмент кода в консоли разработчика. Что еще я могу попробовать?
Нажмите слушателя
$('main').on('click', 'td.pointer, aside li.pointer', function(e) { if ($(e.target).is('td') && !$(e.target).hasClass('selected')) addSelection().call(this, null); else removeSelection().call(this, null); });
addSelection это огромная функция, которая в основном проверяет, выбрана ли строка этого элемента заранее, и пытается отменить ее выбор (именно это условие вызывает ошибку), а затем регистрирует пользовательский объект с подробностями, относящимися к этому выбранному элементу, для синхронизации между списком таблиц и боковой корзиной. Я думаю, что это более просто, чем публикация фактического кода, но если это сделает вещи более ясными, дайте мне знать, чтобы я тоже мог опубликовать его. Большое спасибо.
F-ES Sitecore
Что-то в вашем коде, вероятно, находится в бесконечном цикле. Добавьте несколько строк отладки или пройдите через свой код, чтобы выяснить, что именно.
nmeri17
Я ее разгадал. Спасибо