Mam pewne problemy z kierowaniem dynamicznie tworzonych elementów przy pomocy JavaScript.Problemy JavaScript dotyczące zdarzeń dla dynamicznie tworzonego HTML
Issue 1
Skrócony kod 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: Teraz chcę zrobić imprezę na moim <nav>
. Jak mogę przekonwertować wydarzenie na adres #lightbox nav a
zamiast tylko #lightbox nav
?
nav.addEventListener("click", function() {
// works, but I want to target only the <a> links inside
});
Próbowałem wielu rzeczy, na przykład:
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
});
}
I tak:
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
Skrócony kod 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: Jak dodać wydarzenie do dynamicznie tworzonego #lightbox img
? img = document.createElement("img")
musi być wewnątrz funkcji dołączania wielu obrazów, iz tego powodu nie mogę zrobić tak (jak obecnie na <nav>
):
img.addEventListener("click", function() {
// doesn't work because img = document.createElement("img")
// has to be inside another function
});
Czy ktoś mógłby mi pomóc w tej sprawie? Nie mam dużego doświadczenia z JavaScriptem.
To jest dobre pytanie. +1 –