【发布时间】:2020-07-24 07:14:15
【问题描述】:
我正在使用原生 JavaScript 创建照片轮播;从外部 JSON 文件中读取值,然后遍历 JSON 数据以动态添加缩略图、标题和 onclick 到轮播 div。所有图像和标题都可以正常工作,但无论单击哪个缩略图,onclick 都只会传递最后使用的值。
这是 JSON 文件
var Scenes = {
"Title":["St. Mary Magdalene","Black Mountains","Pen Twyn Glas","Carreg Yr Ogof Cave","Beinn Narnain"],
"Thumbnail":["TNStMary.jpg","TNMountains.jpg","TNPenTwynGlas.jpg","TNCarregYrOgof.jpg","TNBeinnNarnain.jpg"],
"PanoSet":["001x","145+","183+","400x","500x"]
};
这是动态添加缩略图、标题和点击的代码。
var Scenes = {
"Title":["St. Mary Magdalene","Black Mountains","Pen Twyn Glas","Carreg Yr Ogof Cave","Beinn Narnain"],
"Thumbnail":["TNStMary.jpg","TNMountains.jpg","TNPenTwynGlas.jpg","TNCarregYrOgof.jpg","TNBeinnNarnain.jpg"],
"PanoSet":["001x","145+","183+","400x","500x"]
};
var Repeat = (Scenes.Title.length);
for (i = 0; i < Repeat; i++) {
NewDiv = document.createElement('div');
NewDiv.id = 'Scene' + i;
document.getElementById('Carousel').appendChild(NewDiv);
document.getElementById('Scene' + i).className = "Scene";
document.getElementById('Scene' + i).style.position = "absolute";
document.getElementById('Scene' + i).style.top = "5px";
document.getElementById('Scene' + i).style.left = 5 + (170 * i) + "px";
document.getElementById('Scene' + i).onclick = function() {
addScene(Scenes.PanoSet[i]);
};
NewDiv = document.createElement('div');
NewDiv.id = 'SceneThumbnail' + i;
document.getElementById('Scene' + i).appendChild(NewDiv);
document.getElementById("SceneThumbnail" + i).className = "SceneThumbnail";
document.getElementById("SceneThumbnail" + i).style.backgroundImage = "url(" + Scenes.Thumbnail[i] + ")";
NewDiv = document.createElement('div');
NewDiv.id = 'SceneTitle' + i;
document.getElementById('Scene' + i).appendChild(NewDiv);
document.getElementById("SceneTitle" + i).className = "SceneTitle";
document.getElementById('SceneTitle' + i).innerHTML = Scenes.Title[i];
}
<div id='Carousel'><div>
这似乎是问题所在(我包括以上所有内容以提供上下文)
document.getElementById('Scene'+i).onclick = function() {addScene(Scenes.PanoSet[i]);};
我点击了哪个新创建的 div,代码“500x”被传递给我的 addScene 函数。
我希望我看起来有些简单。有人可以提供解决方案吗?
【问题讨论】:
-
你不需要一遍又一遍地调用
document.getElementById('Scene'+i),你有NewDiv的元素就用那个 -
i被你的循环静音,所以每次点击都指向i。如上所述,这是一个骗局 -
除了修复
i之外,您还可以查看事件委托(父元素上的onclick事件侦听器,从事件目标中获取您需要的内容)。
标签: javascript