【发布时间】:2015-02-23 23:41:31
【问题描述】:
我在使用 JavaScript 定位动态创建的元素时遇到了一些问题。
问题 1
缩短的 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: 现在我想在我的<nav> 上做一个活动。如何让事件定位到 #lightbox nav a 而不仅仅是 #lightbox nav?
nav.addEventListener("click", function() {
// works, but I want to target only the <a> links inside
});
我尝试了很多东西,比如:
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
});
}
还有这个:
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
});
}
问题 2
缩短的 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:如何将事件添加到动态创建的#lightbox img? img = document.createElement("img") 必须在函数内部才能附加多个图像,因此我不能这样做(就像目前在 <nav> 上一样):
img.addEventListener("click", function() {
// doesn't work because img = document.createElement("img")
// has to be inside another function
});
有人可以帮我解决这个问题吗?我对 JavaScript 不是很有经验。
【问题讨论】:
-
这是个好问题。 +1
标签: javascript events dynamic onclick dom-events