gpt4 book ai didi

javascript - JS -> 从另一个函数访问变量

转载 作者:行者123 更新时间:2023-11-28 03:21:33 25 4
gpt4 key购买 nike

我是这个网站和一般编程的新手,而且我在学校作业上有点困难。作为引用,这里是我当前正在处理的代码:Pastebin

function initChests(){
let gameChests = document.getElementById('chests');

for(let i = 0; i < 3; i++) {
let singleChest = document.createElement('img');
singleChest.src = 'images/chest-closed.png';
singleChest.alt = 'A chest'
singleChest.style.marginRight = '20px';

gameChests.appendChild(singleChest);
}
}

function initChestEventListeners() {
singleChest.addEventListener('click', chestClicked);
}

function chestClicked(e){
console.log("hello");
}

现在解决我的问题。我想要做的是在我的 initChestEventListeners 函数中访问变量 singleChest,而不将该变量设置为全局变量。

我知道我可以将 singleChest addEventListener 放入 initChests 函数中,但这也不是我想要做的。如果可能的话,我想让它与我拥有的函数结构一起工作。

这是可能的吗?如果可以,有人可以解释我需要做什么或将我重定向到可以帮助解释解决方案的指南吗?

提前谢谢您!亲切的问候。

最佳答案

一种选择是向父元素添加事件监听器,即 gameChests,然后单击时,如果单击的元素是 img,则对其执行某些操作:

function initChests() {
const gameChests = document.getElementById('chests');
for (let i = 0; i < 3; i++) {
let singleChest = document.createElement('img');
singleChest.src = 'images/chest-closed.png';
singleChest.alt = 'A chest'
singleChest.style.marginRight = '20px';

gameChests.appendChild(singleChest);
}
}

function initChestEventListeners() {
const gameChests = document.getElementById('chests');
gameChests.addEventListener('click', chestContainerClicked);
}

function chestContainerClicked(e) {
if (!e.target.matches('img')) {
return;
}
console.log("hello", e.target);
}

initChests();
initChestEventListeners();
<div id="chests"></div>

这种监视冒泡到父元素的事件的方法称为事件委托(delegate)。

关于javascript - JS -> 从另一个函数访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59113075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com