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

166
Vistas
El cambio de clase en un detector de eventos es solo temporal, classList.replace es solo para un clic, cómo hacerlo permanente

[![ingrese la descripción de la imagen aquí][1]][1]Quería crear una aplicación simple para dibujar coloreando el fondo de los cuadrados haciendo clic en ellos. Agregué un evento de clic en cada li que cambia el color de fondo al agregar una clase. Sin embargo, me gustaría llevarlo al siguiente nivel agregando 4 botones que cambiarían los colores del resaltado. Alguien me puede ayudar con eso?

Entonces, mi problema es: ¿Cómo hacer clic en un botón (li en el encabezado) que seleccionará el color para mi detector de eventos original en ul class = grid li?

 <header> <ul class="header"> <li class="black">Black</li> <li class="red">Red</li> <li class="blue">Blue</li> <li class="orange">Orange</li> </ul> </header> <ul class="grid"> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> .......
 const myElements = document.getElementsByTagName("li");
 for (let i = 0; i < myElements.length; i++) { myElements[i].addEventListener("click", function () { let selected = myElements[i]; selected.classList.toggle("highlight"); }); }

Lo intenté (eliminar y agregar nueva clase, reemplazar clase, alternar)

 black.addEventListener("click", function () { selected.classList.replace("highlight", "black"); });

Pero el cambio de color de fondo es solo una vez. Quiero que la nueva clase se vuelva permanente. 1]: https://i.stack.imgur.com/Fgg87.png

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

0

Al agregar detectores de eventos tanto a su ul.header li como a su ul.grid li , logrará esto. El detector de eventos ul.header li click guardará el color que desee y ul.grid li click utilizará ese color guardado para aplicarlo.

 var selcolor = ''; const colorbtns = document.querySelectorAll('ul.header > li'); const griditems = document.querySelectorAll('ul.grid > li'); colorbtns.forEach(function(el) { el.addEventListener("click", function(e) { selcolor = e.target.className; console.log(selcolor); }); }); griditems.forEach(function(el) { el.addEventListener("click", function(e) { if(el.classList.length <= 0) { el.classList.add(selcolor); } else { el.className = ""; } }); });
 .header li { display:inline-block; color:#fff; padding:5px; } .grid li { width:50px; height:50px; display:inline-block; border:1px solid black; } .black { background-color:black; } .red { background-color:red; } .blue { background-color:blue; } .orange { background-color:orange; }
 <header> <ul class="header"> <li class="black">Black</li> <li class="red">Red</li> <li class="blue">Blue</li> <li class="orange">Orange</li> </ul> </header> <ul class="grid"> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul>

EDITAR

Actualizado el código

 el.addEventListener("click", function(e) { el.classList.add(selcolor); });

A

 el.addEventListener("click", function(e) { if(el.classList.length <= 0) { el.classList.add(selcolor); } // this else statement will clear the color on second click if theres already one color assigned else { el.className = ""; } });

De esa manera, solo puede asignar el color una vez según su comentario.

Pero el cambio de color de fondo es solo una vez.

about 4 years ago · Juan Pablo Isaza Denunciar

0

En este caso, debería usar mejor los selectores de consultas en JavaScript.

 const myElements = document.querySelectorAll("div.grid > li");

Puede leer más sobre esto aquí: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector y https://developer.mozilla.org/en-US/docs/Web/ API/Documento/querySelectorAll

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