Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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:单击数字框-增量不起作用_Javascript_Loops_Event Listener - Fatal编程技术网

javascript:单击数字框-增量不起作用

javascript:单击数字框-增量不起作用,javascript,loops,event-listener,Javascript,Loops,Event Listener,使用下面的代码,我创建了一个按钮网格5x5,每个按钮随机分配1-25个数字。它们将按数字顺序单击,按正确顺序单击时,每个背景都会变为红色。我无法在此提示中使用全局变量。如果没有一个全局变量,我不知道如何增加correctNumbers函数,该函数检查每次单击的数字是否正确。我想我缺少了一些东西,一个js函数或者一些可以启用递增函数中声明的递增变量的东西。我不是在寻找完整的解释,只是关于我可能不知道的函数的提示,以及我试图做的事情在逻辑上是否不可能 <div id="number

使用下面的代码,我创建了一个按钮网格5x5,每个按钮随机分配1-25个数字。它们将按数字顺序单击,按正确顺序单击时,每个背景都会变为红色。我无法在此提示中使用全局变量。如果没有一个全局变量,我不知道如何增加correctNumbers函数,该函数检查每次单击的数字是否正确。我想我缺少了一些东西,一个js函数或者一些可以启用递增函数中声明的递增变量的东西。我不是在寻找完整的解释,只是关于我可能不知道的函数的提示,以及我试图做的事情在逻辑上是否不可能


<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,但我没有正确地实施它。我很感激!非常感谢!这确实奏效了。我对这一点很陌生,尝试了一个。我想到了长度,但我没有正确地实施它。我很感激!