Это мой пример.
$(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();
});
Если вы хотите открыть третий узел, вы заметите проблему. поскольку он переключает все на каждый клик, поэтому я попробовал использовать проверку, если у нее есть родитель, чтобы скрыть только детей и т.д., но это не сработало вообще...
Любое предложение приветствуется.
Это должно работать:
$(window).load(function() {
$('li').click(function(evt) {
$(this).children('ul').toggle();
evt.stopPropagation(); //Stop bubbling upwards, so our parent doesnt recieve this click!
});
});
Всякий раз, когда вы нажимаете LI, вы хотите переключить ребенка. Проблема - пузырь событий, ваш клик уволен на самом внутреннем элементе, но затем пузырится до родителя. Что закрывает элемент, как и ожидалось.
Вот почему мы прекращаем пузыриться до того, как он туда доберется, поэтому родитель не получит клик, и мы останемся открытыми.