Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在递归后多次触发addEventListener_Javascript_Recursion_Foreach_Addeventlistener - Fatal编程技术网

Javascript 在递归后多次触发addEventListener

Javascript 在递归后多次触发addEventListener,javascript,recursion,foreach,addeventlistener,Javascript,Recursion,Foreach,Addeventlistener,我对JavaScript相当陌生,正在制作一个简单的石头、布、剪刀游戏。我正在使用addEventListener等待岩石按钮、纸按钮或剪刀按钮被按下,然后它将执行游戏。问题是,当我按下重新启动游戏按钮并开始一个新游戏时,addEventListener中的按钮单击功能会执行两次。因此,它只需单击一个按钮,即可播放该轮2次。如果我重新启动游戏,addEventListener函数将执行3次,以此类推。restart函数将分数重置为0,并调用main()游戏函数。我认为这个问题必须处理在resta

我对JavaScript相当陌生,正在制作一个简单的石头、布、剪刀游戏。我正在使用addEventListener等待岩石按钮、纸按钮或剪刀按钮被按下,然后它将执行游戏。问题是,当我按下重新启动游戏按钮并开始一个新游戏时,addEventListener中的按钮单击功能会执行两次。因此,它只需单击一个按钮,即可播放该轮2次。如果我重新启动游戏,addEventListener函数将执行3次,以此类推。restart函数将分数重置为0,并调用main()游戏函数。我认为这个问题必须处理在restart()函数中递归运行main()时再次执行addEventListener的问题。我该如何解决这个问题

const myscorelab=document.querySelector('.myScore');
const compScoreLabel=document.querySelector(“.compScore”);
const resultLabel=document.querySelector('.result');
const winnerLabel=document.querySelector('.winner');
设myscore=0;
让计算机得分=0;
函数computerPlay(){
让选择=[“石头”、“布”、“剪刀”];
设index=Math.floor(Math.random()*3);
让我们移动=选择[索引];
回击动作;
}
功能playRound(玩家选择、计算机选择){
让player=playerSelection.toLowerCase();
让computer=computerSelection.toLowerCase();
开关(播放器){
案例“岩石”:
交换机(计算机){
案例“岩石”:
返回“Draw!重试…”;
打破
案例“文件”:
返回“你输了!再试一次…”;
打破
案例“剪刀”:
返回“你赢了!”;
打破
}
打破
案例“文件”:
交换机(计算机){
案例“岩石”:
返回“你赢了!”;
打破
案例“文件”:
返回“Draw!重试…”;
打破
案例“剪刀”:
返回“你输了!再试一次…”;
打破
}
打破
案例“剪刀”:
交换机(计算机){
案例“岩石”:
返回“你输了!再试一次…”;
打破
案例“文件”:
返回“你赢了!”;
打破
案例“剪刀”:
返回“Draw!重试…”;
打破
}
打破
}
}
函数main(){
myScoreLabel.textContent=myscore;
compScoreLabel.textContent=computerscore;
resultLabel.textContent=“”;
winnerLabel.textContent=“”;
const buttons=document.queryselectoral('button');
按钮。forEach((按钮)=>{
addEventListener('click',function(){
让playerSelection=this.value;
让计算机选择=计算机播放();
让结果=游戏轮(玩家选择、计算机选择);
const resultLabel=document.querySelector('.result');
resultLabel.textContent=结果;
控制台日志(结果);
如果(结果==“你赢了!”){//win
myscore++;
myScoreLabel.textContent=myscore.toString();
log(“你的分数:+myscore”);
console.log(“计算机分数:+computerscore”);
控制台日志(“”);
如果(myscore==5){
winnerLabel.textContent=“你赢了比赛!”;
警报(“单击重新启动以玩新游戏”);
}
}
否则,如果(结果==“您输了!再试一次…”){//lose
计算机评分++;
compScoreLabel.textContent=computerscore.toString();
log(“你的分数:+myscore”);
console.log(“计算机分数:+computerscore”);
控制台日志(“”);
如果(计算机分数==5){
winnerLabel.textContent=“你输掉了比赛!”;
警报(“单击重新启动以玩新游戏”);
}
}
否则{//Draw
log(“你的分数:+myscore”);
console.log(“计算机分数:+computerscore”);
控制台日志(“”);
}
});
});
}  
函数重新启动(){
myscore=0;
计算机评分=0;
main();
}
main()

:
button.onclick = function() { ...