javascript - 无法在 HTMLImageElement.changeImg 处设置未定义的属性“src”
问题描述
在这段代码中,当我使用 [i] 时它不起作用,但如果我使用 [0] 或 [1] 而不是 [i] 它起作用。我不明白为什么 [i] 不能与 src 一起使用。
HTML 代码
<div class="player">
<p >Player 1
</p>
<img id="myimg" src="images/dice6.png">
</div>
<div class="player">
<p> Player 2
</p>
<img id="myimg" src="images/dice6.png">
</div>
JS代码
var images = ["images/dice1.png","images/dice2.png","images/dice3.png","images/dice4.png","images/dice5.png","images/dice6.png"];
for (var i = 0; i < document.querySelectorAll("#myimg").length; i++){
document.querySelectorAll("#myimg")[i].addEventListener("click", changeImg);
function changeImg(){
var randomNumber1 = Math.floor(Math.random() * images.length);
document.querySelectorAll("#myimg")[i].src = images[randomNumber1] ;
}
}
解决方案
不要使用 ID 的双精度,它们必须是唯一的。更好地使用类。
编辑版本
在 eventListener 中为您的 changeImg 调用一个函数。获取随机图像并使用 `this` 获取实际元素并更改源。注意:因为 JS 中的随机并不是真正随机的,所以我添加了随机搜索,只要图像与实际相同。否则,您有时不得不单击多个进行更改。
为了进行测试,最好查看是否使用full_page链接(在输出窗口的右上角)。
var images = ["https://media.flaticon.com/dist/min/img/home/kiranshastry.png","https://www.pokewiki.de/images/thumb/d/d5/Sugimori_848.png/250px-Sugimori_848.png","https://assets.pokemon.com/assets/cms2/img/pokedex/full/034.png","https://assets.pokemon.com/assets/cms2/img/pokedex/full/030.png"];
for (let i = 0; i < document.querySelectorAll(".myimg").length; i++){
document.querySelectorAll(".myimg")[i].addEventListener("click", changeImg);
}
function changeImg(){
let randomNumber1;
do {
randomNumber1 = Math.floor(Math.random() * images.length);
} while (this.src == images[randomNumber1]);
this.src = images[randomNumber1] ;
}
<div class="player">
<p >Player 1</p>
<img class="myimg" src="https://www.pokewiki.de/images/thumb/d/d5/Sugimori_848.png/250px-Sugimori_848.png">
</div>
<div class="player">
<p> Player 2</p>
<img class="myimg" src="https://assets.pokemon.com/assets/cms2/img/pokedex/full/034.png">
</div>
推荐阅读
- c# - HttpClient 发布调用
- javascript - 使用 jQuery 禁用/启用字段
- java - 在spring boot中发送成功响应后调用另一个服务?
- python - 在图像分割中 Jaccard 指数大于 Dice 系数
- android - RecyclerView 分页时在列表中间跳转
- camunda - Camunda 数据并发问题
- linux - `crontab` 什么时候听?
- php - 单击按钮后使用 PHP 将 HTML 输入到 SQL 查询中
- javascript - 以编程方式添加对象时如何从对象数组中键入属性
- python - django.core.exceptions.ImproperlyConfigured。来自 django 初学者的 SOS