Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

247
Vistas
Cambiar color de cajas Javascript

Tengo un problema que estoy luchando por resolver. Hice 3 cuadros en html/css y tengo un eventListener, por lo que cuando se hace clic en un cuadro, cambia a rojo. Lo que quiero hacer es hacer que todos los cuadros sean verdes una vez que todos los cuadros hayan sido coloreados en rojo. Aquí estaba mi intento:

 var buttonOne = document.querySelector(".one"); var buttonTwo = document.querySelector(".two"); var buttonThree = document.querySelector(".three"); function makeBoxRed(event) { var boxClicked = event.target; boxClicked.style.backgroundColor = "red"; } var boxes = document.querySelector(".boxes"); boxes.addEventListener("click", makeBoxRed); if ((boxes.style.backgroundColor = "red")) { boxes.style.backgroundColor = "green"; }
 div { border: 1px solid black; height: 100px; width: 100px; }
 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <section class="boxes"> <div class="one"></div> <div class="two"></div> <div class="three"></div> </section> </body> </html>

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

El problema con su función es que la declaración if solo se ejecuta una vez al comienzo del script, en su lugar, debe tenerla dentro de la función de escucha de eventos.

 const buttonOne = document.querySelector(".one"); const buttonTwo = document.querySelector(".two"); const buttonThree = document.querySelector(".three"); const boxes = document.querySelector(".boxes"); function makeBoxRed(event) { const boxClicked = event.target; boxClicked.style.backgroundColor = "red"; // Check if all the boxes are red for (const box of boxes.children) { // If a box is NOT red, abort function if (box.style.backgroundColor !== 'red') return; } // All boxes are red boxes.style.backgroundColor = 'green' alert('All boxes are red!') } for (const box of boxes.children) { // Assign event listener to each box box.addEventListener("click", makeBoxRed); }
 div { border: 1px solid black; height: 100px; width: 100px; }
 <section class="boxes"> <div class="one"></div> <div class="two"></div> <div class="three"></div> </section>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Esperemos que esto aborde su problema. Una vez que se ha hecho clic en los tres cuadros, se cambian de rojo a verde. De esta manera, solo las cajas responden al evento de clic y no el objeto contenedor.

 const buttonOne = document.querySelector(".one"); const buttonTwo = document.querySelector(".two"); const buttonThree = document.querySelector(".three"); const boxes = document.querySelector(".boxes"); function makeBoxRed(event) { const boxClicked = event.target; boxClicked.style.backgroundColor = "red"; // Check if all the boxes are red for (const box of boxes.children) { // If a box is NOT red, abort function if (box.style.backgroundColor !== 'red') return; } // All boxes are red, make them all green instead. for (const box of boxes.children) { box.style.backgroundColor = 'green' } } // Register the event separately for each box (so the parent object doesn't handle clicks) for (const box of boxes.children) { box.addEventListener("click", makeBoxRed); }
 div { border: 1px solid black; height: 100px; width: 100px; }
 <section class="boxes"> <div class="one"></div> <div class="two"></div> <div class="three"></div> </section>

about 4 years ago · Juan Pablo Isaza Denunciar

0

 let box1 = document.getElementById("boxOne"); let box2 = document.getElementById("boxTwo"); let box3 = document.getElementById("boxThree"); box1.addEventListener("click", function(event) { box1.classList.remove("blue"); box1.classList.add("red"); CheckColors(); }); box2.addEventListener("click", function(event) { box2.classList.remove("blue"); box2.classList.add("red"); CheckColors(); }); box3.addEventListener("click", function(event) { box3.classList.remove("blue"); box3.classList.add("red"); CheckColors(); }); function CheckColors() { if (box1.classList.contains("red") && box2.classList.contains("red") && box3.classList.contains("red")) { box1.classList.remove("red"); box2.classList.remove("red"); box3.classList.remove("red"); box1.classList.add("green"); box2.classList.add("green"); box3.classList.add("green"); } }
 .holder { display: flex; flex-wrap: wrap; } .box { text-align: center; flex-basis: 33%; width: 50px; height: 50px; } .green { background-color: green; } .blue { background-color: blue; } .red { background-color: red; }
 <div class="holder"> <div id="boxOne" class="box blue"> Box 1 </div> <div id="boxTwo" class="box blue"> Box 2 </div> <div id="boxThree" class="box blue"> Box 3 </div> </div>

esto funcionaria

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda