@ygen

Не выдаёт jquery data-level при событии click?

Задача - при клике подсветить пункт. Если клик совершается на том же уровне (уровень 1), снять выделение с других пунктов кроме текущего.

Есть меню типа:

<ul class="menu">
<li  class="open" data-level="1">
  <a href="">Category</a>
     <ul class="submenu">
         <li class="open" data-level="2">Subcategory11</li>
         <li class="open"  data-level="2">Subcategory12</li>
    </ul>
</li>
<li  class="open" data-level="1">
  <a href="">Category2</a>
     <ul class="submenu">
         <li class="open" data-level="2">Subcategory21</li>
         <li class="open"  data-level="2">Subcategory22</li>
    </ul>
</li>
</ul>


Обработка события клика на пункт меню:
$('li.open').on("click",function(){

$(this).addClass('act');
console.log('data='+$(this).data('level'));

	/* считаем сколько элементов активно */
$('ul.menu').each(function () {
   actMenu=$(this).find('.act').length;
});

if (($(this).attr('data-level'))<actMenu) {
 $(this).parent().find('li.act').removeClass('act');
 $(this).addClass('act');
}
});


При клике результат такой:
Клик на первый пункт -
data=1

Клик на второй пункт -
data=2
data=1

Можете помочь решить проблему? Спасибо.
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Из-за всплытия событий клики по вложенным элементам обрабатываются несколько раз - сначала на том элементе, где клик случился, а затем на его предках. Останавливайте всплытие событий:

.on('click', function(e) {
  e.stopPropagation();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы