Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/04/2020, 16:21
Avatar de kahlito
kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Detectar valor document.getElementById() dentro de un array

Cita:
Iniciado por prueba230683 Ver Mensaje
Como el evento click tiene efecto burbuja (bubbling), lo que puedes hacer es crear un contenedor genérico para todas esas imágenes:

Código HTML:
Ver original
  1. <div id="contenedor">
  2.    <li><img id="azul" src="img/azul.png" ></li>
  3.    <li><img id="amarillo" src="img/amarillo.png" ></li>
  4.    <li><img id="verde" src="img/verde.png" ></li>
  5.    <li><img id="rojo" src="img/verde.png" ></li>
  6. </div>

y asociar el evento click a dicho contenedor:

Código Javascript:
Ver original
  1. document.getElementById("contenedor").onclick = function(event){
  2.   var elemento = event.target;
  3.   if(elemento.tagName = "IMG"){ // si se ha hecho click a una imagen
  4.     modal.style.display = "flex";
  5.     modalImg.src = elemento.src;
  6.     captionText.innerHTML = elemento.alt;
  7.   }
  8. }

De esta forma no hace falta recorrer cada una de las imágenes. Además, si si añaden más imagenes dinámicamente, el código sigue funcionando.
Gracias prueba230683, me va perfecto.

Cita:
Iniciado por Panino5001 Ver Mensaje
Estaba respondiéndote, pero se me adelantó prueba230683. Solo cambiaría esto:
Código:
contenedor.onclick = function(event){
  var elemento = event.target;
  if(elemento.tagName = "IMG"){ // si se ha hecho click a una imagen
    modal.style.display = "flex";
    modalImg.src = elemento.src;
    captionText.innerHTML = elemento.alt;
  }
}
Por esto:
Código:
var contenedor=document.getElementById('contenedor');
contenedor.addEventListener(
    'click',
     function(e){
        var elemento = e.target;
        if(elemento.nodeName.toLowerCase()== "img"){
            modal.style.display = "flex";
            modalImg.src = elemento.src;
            captionText.innerHTML = elemento.alt;
        }
    }
);
Gracias Panino5001, también me salio a la primera.

¿Qué diferencia hay en el cambio? ¿Con cual me quedo al final?

Por cierto, también me pasaron esta opción, la dejo aquí por si también para compartir:

Código Javascript:
Ver original
  1. // seleccionamos todas las img dentro de la lista (li)
  2. var images = document.querySelectorAll("li > img");
  3.  
  4. for (i = 0; i < images.length; i++) {
  5.         images[i].addEventListener("click", function(){
  6.              modal.style.display = "flex";
  7.             modalImg.src = this.getAttribute('src');
  8.             captionText.innerHTML = this.getAttribute('alt');
  9.        });
  10.     }

Gracias a ambos por la gran ayuda.

Última edición por kahlito; 22/04/2020 a las 16:28 Razón: Añadir nueva opción