n!khil Ответов: 1

как решить проблему Uncaught RangeError: максимальный размер стека вызовов превышен в jquery


Привет всем, у меня есть метод щелчка ячейки сетки, реализованный с помощью jquery следующим образом
function usercellclick() {

            $("#<%=dgv_buslayout.ClientID%> tr:has(td)").click(function (e) {
                var selTD = $(e.target).closest("td");
                var $target = $(e.target);
                if (!$target.is('input:checkbox')) {
                    $($target).find('input:checkbox').each(function () {
                        if (!$(this).prop('disabled')) {
                            if (this.checked) {
                                this.checked = false;
                                getseats();
                            }
                            else {
                                this.checked = true;
                                getseats();
                            }
                        }
                    })
                }
            });
 });
function getseats() {
            seatCheckUncheck(document.getElementById("<%= txtselectedseats.ClientID %>"), document.getElementById("<%=txtseatcount.ClientID %>"));
           
            OnSuccess();
        }
function OnSuccess() {
            var seatsCount = document.getElementById("<%= txtseatcount.ClientID %>").value;
            if (seatsCount == 0) {
                var row = $("[id*=dgv_passengerdetails] tr:last").clone(true);
                $("[id*=dgv_passengerdetails] tr").not($("[id*=dgv_passengerdetails] tr:first-child")).remove();
                $("td", row).eq(0).html('');
                $("[id*=dgv_passengerdetails]").append(row);
            }
            else{
                var row = $("[id*=dgv_passengerdetails] tr:last").clone(true);
                $("[id*=dgv_passengerdetails] tr").not($("[id*=dgv_passengerdetails] tr:first-child")).remove();
                var seats = (document.getElementById("<%= txtselectedseats.ClientID %>").value).split(",");
                for (var count = 0; count < seatsCount; count++) {
                    $("td", row).eq(0).html(seats[count]);
                    $("[id*=dgv_passengerdetails]").append(row);
                    row = $("[id*=dgv_passengerdetails] tr:last").clone(true);
                }
            }
        }

когда я нажимаю кнопку Продолжить 6 7 раз он выдает исключение при превышении максимального размера стека вызовов
если я удалю другую часть функции OnSuccess (), то она будет работать нормально. помогите мне, спасибо заранее

Kornfeld Eliyahu Peter

Ошибка связана с рекурсивными вызовами. Вы заполняете очередь. Однако неясно, где именно находится рекурсия, поэтому вам придется отлаживать, чтобы увидеть...

[no name]

отладочное шоу в jquery.min.js файл

Kornfeld Eliyahu Peter

Конечно, неудача все-таки в jQuery...но вы должны понимать, где в вашем коде находится рекурсия!

[no name]

когда я удаляю часть else из OnSuccess (), код не создает исключения. но там может не быть никакой строки, которая вызывает рекурсию

Lord Perez

В вашем предложении else у вас есть цикл for. Попробуйте напечатать переменные count и seatsCount, чтобы увидеть, выходите ли вы когда-нибудь из цикла. :3

1 Ответов

Рейтинг:
0

Member 14210496

Установите для модального атрибута значение false

$("#dialog-edit").dialog({
                     resizable: false,
                     height: "auto",
                     width: 400,
                     modal: false,
                     autoOpen: false,
                     buttons: {
                         "Update Edit Values": function () {
                             APPROVE.modal.onSubmitEditedValues(this);
                             $(this).dialog("close");
                             return;
                         },
                         "Cancel Edit": function () {
                             APPROVE.modal.editOnUnCancel(this);

                             $(this).dialog("close");
                             return;
                         }
                     }
                 });


Richard Deeming

Ни малейшей попытки ответить на этот вопрос!