Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как сделать задержку? (https://javascript.ru/forum/dom-window/72653-kak-sdelat-zaderzhku.html)

LADYX 15.02.2018 09:10

Как сделать задержку?
 
Добрый день!
Есть такой код:
$("#feedback_reklama_options input[type='checkbox']").click(function(){
  $(".feedback_reklama_option").hide();
  $(".feedback_reklama_all").hide();
  $("#feedback_reklama_options label").removeClass("label_feedback_reklama_active");
  $("#feedback_reklama_options input[type='checkbox']").not(this).each(function(){
    this.checked = false;  
  });
  if (this.checked) {
    $("." + $(this).data("blockclass")).show();
    $(this).closest("label").addClass("label_feedback_reklama_active");
    $(".feedback_reklama_all").show();
  }
});

Подскажите, пожалуйста, как правильно сделать задержку? Мне нужно, чтобы строки
$("." + $(this).data("blockclass")).show();
и
$(".feedback_reklama_all").show();
выполнялись с задержкой в 3сек,

а строка
$(this).closest("label").addClass("label_feedback_reklama_active");
с задержкой в 5сек.

Как можно это сделать? Подскажите, пожалуйста. Спасибо!

Белый шум 15.02.2018 09:36

$("." + $(this).data("blockclass")).delay(3000).show(0);

Очередь предстоящих функций

LADYX 15.02.2018 09:54

Белый шум,
приветствую! а как же отдельно сделать задержку для добавления класса .addClass("label_feedback_reklama_active") ?

ksa 15.02.2018 10:19

Цитата:

Сообщение от LADYX
а как же отдельно сделать задержку

Использовать метод
setTimeout()

https://javascript.ru/settimeout

LADYX 15.02.2018 13:11

ksa,
если делаю так
$("#feedback_reklama_options input[type='checkbox']").click(function(){
  $(".feedback_reklama_option").hide();
  $(".feedback_reklama_all").hide();
  $("#feedback_reklama_options label").removeClass("label_feedback_reklama_active");
  $("#feedback_reklama_options input[type='checkbox']").not(this).each(function(){
    this.checked = false;  
  });
  if (this.checked) {
    $("." + $(this).data("blockclass")).delay(3000).show();
setTimeout(function () {
    $(this).closest("label").addClass("label_feedback_reklama_active");
}, 5000)
    $(".feedback_reklama_all").delay(3000).show();
  }
});

то скрипт работает некорректно.
Что я делаю не так?

Nexus 15.02.2018 13:14

В callback-функции функции setTimeout контекст (this) больше не указывает на input.
Сохраните ссылку на нужный контекст и используйте её в callback'е, либо юзайте стрелочную функцию.

Белый шум 15.02.2018 15:03

LADYX,

1) $("." + $(this).data("blockclass")).delay(3000).show(0);
Вроде бы duration надо передавать show когда она после .delay идёт, хотя могу ошибаться.

2) Попробуйте так:
setTimeout(function (t) {
    $(t).closest("label").addClass("label_feedback_reklama_active");
}, 5000, this)

LADYX 15.02.2018 16:54

Да, всё разобрался. Всем вам большое-большое спасибо! Удачи!


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