Обработчик не видит смены класса jQuery

141
01 мая 2019, 23:30

Есть простенький код:

$('.like').on("click", function(){
            console.log("click_l");
            $(this).addClass('unlike');
});
$('.unlike').on("click",function(){
            console.log("click_u");
            $(this).addClass('like');
});
<button class="btn btn-default card_body_like like_div unlike"><div></div></button>

Как видно изначально класс unlike (для него есть свой стиль, подсветка, как и в like) Проблема в том, что постоянно выводит в консоль click_u, то есть даже когда класс unlike пропал, а вместо него поставил like - оно принимает эту кнопку как элемент с классом unlike

Answer 1

Потому что $('.like').on("click" ... выполняется один раз и прикрепляет обработчик клика к элементам выборки $('.like'), то есть элементам с классом "like" на момент выполнения этого кода.

$('.container').on("click", '.like,.unlike', function() { 
 
  if ($(this).hasClass('like')) 
    console.log("click_l"); 
  if ($(this).hasClass('unlike')) 
    console.log("click_u"); 
 
  $(this).toggleClass('unlike like'); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="container"> 
  <button class="btn btn-default card_body_like like_div unlike"><div>Click</div></button> 
</div>

READ ALSO
Не компилируется sass

Не компилируется sass

Подскажите пожалуйста, не компилируется sass в cssУстановил gulp, sass, прописал таск

156
Как переместить прокрутку влево

Как переместить прокрутку влево

Как переместить прокрутку влево, а картинку справа сделать на 100%?

166
Как можно реализовать такую анимацию?

Как можно реализовать такую анимацию?

Нужно анимировать движение рычага, который пользователь дёргает на себя (как в игровом автомате)Даны изображения основы рычага и его набалдашника

149
POI обрезает html при выгрузке

POI обрезает html при выгрузке

Я использую Apache POI 40

144