javascript - 在 Javascript 循环中以编程方式为 imgs 设置唯一的 onclicks

标签 javascript html loops onclick

所以我有这个画廊页面,其中有多个 <img>带有独特图片的标签。单击图片应将您带到另一个网页,其中包含有关该特定图片的更多信息。因此,所有onclick() s 是唯一的,具体取决于图像的 src。

现在,鉴于所有这些 <img>除了图片之外,标签几乎是相同的,我决定使用 JavaScript 将所有标签放在一个循环中,如下所示:

加载ImageGalleryData

for (var i = 0; i < 21; i++) {
    var imgSrc = "http://localhost:63342/Performance%20Task/Website/imgs/gallery/img/" + i + ".jpg";
    console.log(imgSrc);

    var imgDiv = document.createElement('div');
    imgDiv.className = "img";

    var descDiv = document.createElement('div');
    descDiv.className = "desc";

    var imgView = document.createElement('img');
    imgView.src = imgSrc;
    imgView.onclick = (function() {{openWebpage(imgSrc);}})();
    console.log(imgSrc);
    imgView.width = 300;
    imgView.height = 200;

    imgDiv.appendChild(imgView);
    imgDiv.appendChild(descDiv);
    document.getElementsByTagName('body')[0].appendChild(imgDiv);

}

openWebpage()特别是这个函数:

openWebpage()

function openWebpage(src) {
    var orig = window.document.title;
    window.document.title = src;
    open("imagePage.html");
}

imagePage 有一个 jscript,它告诉它自己的 img 和 div 标签显示图像,其源是从 window.document.opener.title 或类似的东西接收的。

所有图像都已构建,但 onclick()不注册。在 Chrome 的开发者模式下查看,图像没有 onlick()属性。

另外,如果我更改这段代码:

 imgView.onclick = (function() {{openWebpage(imgSrc);}})();

进入此:

 imgView.onclick = function() {openWebpage(imgSrc);};

onlick()确实注册,但同时针对每个图像,使用创建的最后一个图像的 src 进行注册。因此,当我单击图片 1 时,它会转到图片 22 的信息。其他所有图片也是如此。都是相同的信息。

我在这里做错了什么?

编辑:附加信息

imagePage.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="css/imagePage.css"/>
<script src="jscript/imageData.js"></script>
<script src="jscript/loadImageData.js"></script>
</head>
<ul>
<li><a href="homepage.html">Home</a></li>
<li><a href="gallery.html">Gallery</a></li>
<li><a href="about.html">About</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
<body>
<div>
    <h1 id="imageTitle">TESTTITLE</h1>
</div>

<div>
    <img id="imageView">
</div>

<div class="boxed" id="imageDesc">

</div>
</body>

</html>

加载图像数据

window.onload = function() {
    var imageSrc = opener.document.title;
    var imageDesc = map[imageSrc];

    var imageView = document.getElementById("imageView");
    var imageDescView = document.getElementById("imageDesc");

    imageView.src = imageSrc;
    imageDescView.innerHTML = imageDesc;
};

最佳答案

在循环的最后一次迭代中,您将 imgSrc 设置为图片 22 的 url。因此,在单击事件中,您的函数 openWebPage 将在参数中使用该 url 进行触发。

关于javascript - 在 Javascript 循环中以编程方式为 imgs 设置唯一的 onclicks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42611548/

相关文章:

html - :before with an image and content :"" place the content in the bottom right corner

jquery - 新颖的 CSS 下拉菜单/Megamenu

loops - 逐行解析文件并在批处理中的 for 循环中递增变量

Javascript 添加前导零适用于 while 循环,但不适用于 for 循环

javascript - 将参数传递给 .js 文件

javascript - 按钮的 OnClick 事件在初始化时触发?

javascript - 在 Javascript 中提取正则表达式中的文本

javascript - querySelector 事件监听器 `scroll`

php - 尝试使用 post 数据使用 php 插入 mysql

python - 比较 numpy 数组中的以下两个值