Задать вопрос
@ymfront

Почему не удаляется класс по setTimeout?

По клику на элемент нужно добавить класс, а через секунду удалить его. Добавление класса работает, а вот удаление не работает. В консоли нет никаких ошибок. В чем может быть проблема? Если в setTimeout добавить alert("text"), то alert выскакивает.

$(".box43z6r6QZ").click(function(){

    $(this).addClass("hG8KlY3Q");

    setTimeout(function(){
        $(this).removeClass("hG8KlY3Q");
    }, 1000);

});


HTML:

<div class="box32TgUoAy">
	<span class="box43z6r6QZ 43z6r6QZ__tl">tl</span>
	<span class="box43z6r6QZ 43z6r6QZ__tr">tr</span>
	<span class="box43z6r6QZ 43z6r6QZ__bl">bl</span>
	<span class="box43z6r6QZ 43z6r6QZ__br">br</span>
</div>
  • Вопрос задан
  • 118 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Классическая потеря this. Правда, странно, что при этом нет ошибок в консоли, когда вы на window пытаетесь removeClass вызвать.

$(".box43z6r6QZ").click(function(){
   var $el = $(this);

    $el.addClass("hG8KlY3Q");

    setTimeout(function(){
        $el.removeClass("hG8KlY3Q");
    }, 1000);
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@alexalexes
Еще в добавок к ответу Алексей Уколов могу сказать, что можно выстрелить себе в ногу this или item параметром при итерации foreach какой-нибудь коллекции.
Решается такой конструкцией передачи параметра:
setTimeout((function(this_is_this)
{
   retrun function()
   {
        $(this_is_this).removeClass("hG8KlY3Q");
    }
})(this), 1000);

Здесь используется анонимная функция function(this_is_this), которая превращает контекст this просто в локальный параметр, который передается через замыкание во вложенную функцию.
Ответ написан
@persol
Используйте стрелочную функцию, она позволит вам не выходить из текущего контекста, у нее нет this и данный код будет работать:
$(".box43z6r6QZ").click(function(){

    $(this).addClass("hG8KlY3Q");

    setTimeout(() => {
        $(this).removeClass("hG8KlY3Q");
    }, 1000);
});
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 10:44
130000 руб./за проект
18 дек. 2024, в 10:02
7000 руб./за проект
18 дек. 2024, в 09:56
8000 руб./за проект