#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. Условие работает нормально. В чем проблема здесь?