Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Список с плюсиками (https://javascript.ru/forum/dom-window/30095-spisok-s-plyusikami.html)

Кирюха =) 24.07.2012 02:19

Список с плюсиками
 
Всем привет.Создал список вот такой:
<ul id="menu-priem">
		      <li class="plus level1">ЖКХ
			     <ul class="level2">
				    <li class="plus">Управляющие компании</li>
					<li class="plus">ТСЖ</li>
				 </ul>
			  </li><!--1 уровень-->
			  <li class="plus level1">Дороги
			     <ul class="level2">
				    <li class="plus">Состояние Дорог</li>
					<li class="plus">Лихачи на дорогах</li>
				 </ul>
			  </li><!--1 уровень-->
		    </ul>


Вот код к нему
var fdfdfd = 0;
            jQuery('#menu-priem LI.level1').click(function(){
			fdfdfd++;//плюсуем нечетное нажатие
			if(fdfdfd % 2 !== 0){
	   jQuery(this).removeClass('plus').addClass('minus');
	   jQuery(this).find('ul.level2').slideToggle(400);
			}//Разворачиваем плюс ==> минус
			
			else{
	   jQuery(this).removeClass('minus').addClass('plus');
	   jQuery(this).find('ul.level2').slideToggle(400);
			}//Сворачиваем минус ==> плюс
			
			});

Проблема когда кликаю на UL.level2 LI (LI второго уровня) сворачивается весь UL.level2
Вопрос:как этого избежать?

Кирюха =) 24.07.2012 02:20

Вот ссылка на живой пример http://kamskie.ru/obsh-priemnaya.

h404 24.07.2012 03:33

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

Я ещё немного упростил ваш код:

jQuery('#menu-priem LI.level1').click(function(e){
    if(e.target === this) {
      jQuery(this)
        .toggleClass('plus')
        .toggleClass('minus')
        .find('ul.level2')
        .slideToggle(400);
    }
});

Кирюха =) 24.07.2012 11:04

Ураааааа заработало!!!!! А расскажите про function(e) поподробнее, если конечно вас не затруднит)))))

h404 24.07.2012 21:00

Все обработчики событий в jQuery принимают в качестве аргумента функцияю обратного вызова. При этом в качестве аргумента этой функции передаётся экземпляр объекта Event. Я обозвал этот аргумент e.

Дальше можно сделать вот так и узнать много интересного:

Код:

function(e) {
    console.dir(e);
}



Часовой пояс GMT +3, время: 04:20.