Слишком много рекурсии при выполнении .next в jQuery 1.3.2 - PullRequest
1 голос
/ 24 марта 2009

Я только что обновился до jQuery 1.3.2, что в основном нормально, но я что-то упускаю, когда дело доходит до новой модели событий (я думаю)

$(document).ready(function()
{

    $(".AspNet-Menu-NonLink").click(function()
    {
        $(this).next($("ul")).slideToggle("fast");
    });
    $(".AspNet-Menu-NonLink").next($("ul")).hide();
    $(".AspNet-Menu-ChildSelected").next($("ul")).show();
});

Раньше это работало, но в этой строке появляется ошибка «слишком много рекурсии»:

$(".AspNet-Menu-NonLink").next($("ul")).hide();

Как это может вызвать рекурсию, hide () что-то скрывает, что не так?

UPDATE

Я обнаружил, что если я удалю ссылки на библиотеку сценариев jQuery UI 1.7.1, проблема исчезнет. Даже если я не вызываю что-либо в библиотеке jQuery UI, но включаю это, я получаю ошибку.

Ответы [ 2 ]

6 голосов
/ 24 марта 2009

Для начала попробуйте использовать

$(".AspNet-Menu-NonLink").next("ul").hide();

Вместо этого.

В противном случае вы неявно ищете и возвращаете все ul элементов на странице, а затем передаете результат массив * в функцию "next"

Согласно документации , 'next' принимает строку, выражение, которое используется для фильтрации ее обхода.

$("ul") однако, выполняет запрос DOM и возвращает объект jQuery.

4 голосов
/ 24 марта 2009

Вместо этого:

$(".AspNet-Menu-NonLink").next($("ul")).hide();

попробуйте это:

$(".AspNet-Menu-NonLink").next("ul").hide();

При вызове next() вам нужно только передать строку селектора CSS, а не весь объект jQuery. Документация: http://docs.jquery.com/Traversing/next#expr

Пользовательский интерфейс jQuery может быть ошибочным, поскольку при импорте в приложение он переопределяет стандартную функцию jQuery hide(). См. Строку 3812 в источнике: http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/jquery-ui.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...