Ho alcuni problemi con il targeting di elementi creati in modo dinamico con JavaScript.Problemi JavaScript relativi agli eventi per l'HTML creato dinamicamente
Issue 1
codice accorciato JavaScript:
var lightbox = document.createElement('div'),
nav = document.createElement("nav"),
imga = document.querySelectorAll(".gallery a");
for (i = 0; i < imga.length; i++) {
imga[i].addEventListener("click", function() {
document.body.insertBefore(lightbox, document.body.firstChild);
lightbox.appendChild(nav);
});
}
1: Ora voglio fare un evento sul mio <nav>
. Come faccio a ottenere l'evento come target #lightbox nav a
anziché solo #lightbox nav
?
nav.addEventListener("click", function() {
// works, but I want to target only the <a> links inside
});
Ho provato molte cose, come questo:
var selector = document.querySelectorAll("nav a");
for (i = 0; i < selector.length; i++) {
selector[i].addEventListener("click", function() {
// doesn't work because the <nav> is inserted dynamically
});
}
E questo:
var selector = nav.getElementsByTagName("a");
for (i = 0; i < selector.length; i++) {
selector[i].addEventListener("click", function() {
// doesn't work because the <nav> is inserted dynamically
});
}
Issue 2
accorciato codice JavaScript:
var img,
imga = document.querySelectorAll(".gallery a");
for (i = 0; i < imga.length; i++) {
imga[i].addEventListener("click", function() {
for (i = 0; i < imga.length; i++) {
img = document.createElement("img");
lightbox.appendChild(img);
}
});
}
2: Come si aggiunge un evento allo #lightbox img
creato dinamicamente? Il img = document.createElement("img")
deve essere all'interno della funzione per aggiungere più immagini, e per questo motivo non posso fare come questo (come attualmente in <nav>
):
img.addEventListener("click", function() {
// doesn't work because img = document.createElement("img")
// has to be inside another function
});
Qualcuno può per favore aiutare su questo? Non ho molta esperienza in JavaScript.
Questa è una buona domanda. +1 –