2009-03-24 2 views
1

Я только что обновился до jQuery 1.3.2, который в основном был прекрасен, но я что-то упустил, когда дело доходит до новой модели событий (я думаю)Слишком много рекурсии при выполнении .next в 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(); 

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

UPDATE

Я обнаружил, что если я удалить ссылки на JQuery UI 1.7.1 библиотеку сценариев проблема уходит. Даже если я не нахожу ничего в библиотеке пользовательского интерфейса jQuery, но включил его, я получаю ошибку.

ответ

6

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

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

Вместо.

В противном случае, вы неявно поиск и возвращение всехul элементов на странице, а затем мимоходом, что массивного результата к функции «next».

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

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

+0

Это полезно, я, должно быть, пропустил оригинальные документы. – ilivewithian

4

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

$(".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

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