Простая проблема с деревом jQuery с большим количеством узлов

0

Это мой пример.

$(function() {
    $('li > ul').each(function() {
        var parent_li = $(this).parent('li');
        var sub_ul = $(this).remove();
        parent_li.click(function() {
            sub_ul.toggle();
        });
        parent_li.append(sub_ul);
    });
    $('ul ul').hide();
});

Если вы хотите открыть третий узел, вы заметите проблему. поскольку он переключает все на каждый клик, поэтому я попробовал использовать проверку, если у нее есть родитель, чтобы скрыть только детей и т.д., но это не сработало вообще...

Любое предложение приветствуется.

  • 0
    Как правило, вы должны включать в вопрос весь соответствующий код, а не ссылаться на него извне (на будущее от «мертвой ссылки»)
  • 0
    У меня тоже не работает, jquery отсутствует.
Показать ещё 1 комментарий
Теги:
tree

1 ответ

0

Это должно работать:

$(window).load(function() {
    $('li').click(function(evt) {                   
        $(this).children('ul').toggle();
        evt.stopPropagation(); //Stop bubbling upwards, so our parent doesnt recieve this click!
    });
});

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню