Как настроить Timeout для отображения нескольких разделов с помощью функции if в Javascript

#javascript #html #if-statement #settimeout

#javascript #HTML #if-statement #settimeout

Вопрос:

Итак, у меня есть простой javascript, который выглядит следующим образом

 function  myfunction(){

var a = [document.getElementById("div1"),
document.getElementById("div2"), document.getElementById("div3")];

if(a.style.display=="none"){

setTimeout(function(){a.style.display="block";},4000);
}

}
  

И html-код выглядит так

 <  a href="#" onclick="myfunction();"  >   click to show div1 and div2 after 4 seconds<   /a  >

<  p id="div1"   style="display:none;" >divv1<  /p  >


<  p id="div2"    style="display:none;"    >divv2<  /p  >



<  p id="div3"    style="display:none;"    >divv3<  /p  >
  

Однако divs не отображаются через 4 секунды после того, как я нажал.

Что-то не так с моим кодом?

Может кто-нибудь, пожалуйста, направить меня дальше?

Большое спасибо!

Ответ №1:

var a — это массив, поэтому вам нужно установить стиль для всех элементов массива.

 function myfunction() {

  var a = [document.getElementById("div1"),
    document.getElementById("div2"), document.getElementById("div3")
  ];

  if (a[0].style.display == "none" amp;amp; a[1].style.display == "none" amp;amp; a[2].style.display == "none") {

    setTimeout(function() {
      a.forEach(item => item.style.display = "block");
    }, 4000);
  }

}  
 <a href="#" onclick="myfunction();"> click to show div1 and div2 after 4 seconds
  </a>

<p id="div1" style="display:none;">divv1
</p>


<p id="div2" style="display:none;">divv2
</p>



<p id="div3" style="display:none;">divv3
</p>  

Комментарии:

1. Почему amp;amp; не будет работать в этом состоянии? Например if(document.getElementById(«div1»).style.display==»none»amp;amp;document.getElementById(«div2»).style.display==»none»amp;amp;document.getElementById(«div3″).style.display==»none»){//settimeout}? Пожалуйста, направляйте меня дальше. Большое спасибо!

2. просто не нужно проверять все divs, но только одна проверка отображения css div подходит, потому что вы устанавливаете блокировку отображения всех divs в setTimeout

Ответ №2:

a — это массив. У него нет свойства style. Вам нужно выполнить итерацию по массиву и изменить свойство отображения для каждого.

 function  myfunction() {

  var a = document.querySelectorAll("p") ;

  a.forEach( div => {
    if(div.style.display == "none"){
      setTimeout(function() {
        div.style.display = "block";
      }, 4000);
    }
  });
}
  

Комментарии:

1. Привет, спасибо за ваш ответ. Я хотел бы спросить, почему amp;amp; не будет работать в этом состоянии? Например if(document.getElementById(«div1»).style.display==»none»amp;amp;document.getElementById(«div2»).style.display==»none»amp;amp;document.getElementById(«div3″).style.display==»none»){//settimeout}? Пожалуйста, направляйте меня дальше. Большое спасибо!

2. Условие работает нормально. В чем проблема здесь?