javascript:单击数字框-增量不起作用
使用下面的代码,我创建了一个按钮网格5x5,每个按钮随机分配1-25个数字。它们将按数字顺序单击,按正确顺序单击时,每个背景都会变为红色。我无法在此提示中使用全局变量。如果没有一个全局变量,我不知道如何增加correctNumbers函数,该函数检查每次单击的数字是否正确。我想我缺少了一些东西,一个js函数或者一些可以启用递增函数中声明的递增变量的东西。我不是在寻找完整的解释,只是关于我可能不知道的函数的提示,以及我试图做的事情在逻辑上是否不可能javascript:单击数字框-增量不起作用,javascript,loops,event-listener,Javascript,Loops,Event Listener,使用下面的代码,我创建了一个按钮网格5x5,每个按钮随机分配1-25个数字。它们将按数字顺序单击,按正确顺序单击时,每个背景都会变为红色。我无法在此提示中使用全局变量。如果没有一个全局变量,我不知道如何增加correctNumbers函数,该函数检查每次单击的数字是否正确。我想我缺少了一些东西,一个js函数或者一些可以启用递增函数中声明的递增变量的东西。我不是在寻找完整的解释,只是关于我可能不知道的函数的提示,以及我试图做的事情在逻辑上是否不可能 <div id="number
<div id="numbers" class="hidden"></div>
<div id="youWon" class="hidden">You Won!</div>
The relevant JS:
... /**
* Gives the numbers a random order
* the "Fisher-Yates shuffle" found at: https://www.frankmitchell.org/2015/01/fisher-yates/
* @param {*} array
*/
const shuffle = (array) => {
let i = 0,
j = 0,
temp = null
for (i = array.length - 1; i > 0; i -= 1) {
j = Math.floor(Math.random() * (i + 1))
temp = array[i]
array[i] = array[j]
array[j] = temp
}
}
/**
* Generates an array of numbers 1-25
*/
const generateNums = () => {
document.getElementById("youWon").classList.toggle("hidden", "visible");
const numberArray = [];
for (let a = 1; a <= 25; a++) {
numberArray.push(a);
}
shuffle(numberArray);
let numEl = document.getElementById('numbers'); //write into html div id "numbers"
for (let b = 0; b <= 24; b++) { //loop to create button array
let newBtn = document.createElement('button'); //create buttons
newBtn.className = 'number'; //assign newBtns 'number' class
newBtn.innerText = numberArray[b]; //assign numbers to each button
numEl.appendChild(newBtn); //match with number elements in "numbers" array
newBtn.addEventListener("click", onNumberClick) //create function trigger
}
}
/**
* Creates a function to decide correct and incorrect clicks
* When a user clicks a number, if it is the next number in order, then it turns a different color for the remainder of the test
* If it is the wrong number, nothing happens
* @param {*} event
*/
const incrementNum = (correctNumber) => {
correctNumber++;
}
const onNumberClick = (event) => {
let correctNumber = 1; //start at 1
let numberVal = event.target; //apply it to clicks on the numbers
if (Number(numberVal.innerHTML) + 1 == incrementNum(correctNumber)) {
incrementNum(correctNumber);
numberVal.classList.add("red");
}
if (correctNumber == 26) {
document.getElementById("youWon").classList.toggle("visible"); //show win message if 25 is the last button and gets clicked
}
}
你赢了!
相关JS:
... /**
*给数字一个随机顺序
*“Fisher-Yates shuffle”可在以下位置找到:https://www.frankmitchell.org/2015/01/fisher-yates/
*@param{*}数组
*/
常量洗牌=(数组)=>{
设i=0,
j=0,
温度=零
对于(i=array.length-1;i>0;i-=1){
j=数学楼层(数学随机()*(i+1))
温度=数组[i]
数组[i]=数组[j]
数组[j]=temp
}
}
/**
*生成数字1-25的数组
*/
const generateNums=()=>{
document.getElementById(“youWon”).classList.toggle(“隐藏”、“可见”);
常量numberArray=[];
for(设a=1;a{
让correctNumber=1;//从1开始
让numberVal=event.target;//将其应用于对数字的单击
if(Number(numberVal.innerHTML)+1==incrementNum(correctNumber)){
incrementNum(correctNumber);
numberVal.classList.add(“红色”);
}
如果(正确数==26){
document.getElementById(“youWon”).classList.toggle(“可见”);//如果25是最后一个按钮并被单击,则显示win消息
}
}
我建议您计算DOM中类为“red”的元素的数量,并添加1…检查innerHTML是否等于该数量,以获得正确的序列。因此,与此相反:
if (Number(numberVal.innerHTML) + 1 == incrementNum(correctNumber)) {
incrementNum(correctNumber);
numberVal.classList.add("red");
}
你可以有这样的东西:
if(Number(numberVal.innerHTML) == document.getElementsByClassName('red').length + 1) {
numberVal.classList.add("red");
}
我建议您计算DOM中类为“red”的元素的数量,并添加1…检查innerHTML是否等于该数量,以获得正确的序列。因此,与其这样做,不如:
if (Number(numberVal.innerHTML) + 1 == incrementNum(correctNumber)) {
incrementNum(correctNumber);
numberVal.classList.add("red");
}
你可以有这样的东西:
if(Number(numberVal.innerHTML) == document.getElementsByClassName('red').length + 1) {
numberVal.classList.add("red");
}
请分享完整的HTML。这里有很多东西需要解包。你认为你可以把它缩减为一个吗?我试着把它缩减一点。HTML很小,基本上只是建立标题、标题、简介、数字和获奖消息。所有样式都是css,所有功能都是js。请分享完整的HTML这里有很多东西需要解包。你认为你可以把它缩减为一个吗?我试着把它缩减一点。html非常小,基本上只是建立标题、标题、简介、数字和获奖消息。所有的样式都是css,所有的功能都是js。非常感谢!这确实奏效了。我对这个很陌生,尝试了一个。len我想到了gth,但我没有正确地实施它。我很感激!非常感谢!这确实奏效了。我对这一点很陌生,尝试了一个。我想到了长度,但我没有正确地实施它。我很感激!