javascript - 初学者javascript,显示数组中的前一个数字并重置函数

标签 javascript html css

大家好,我是 javascript 的新手,我挑战自己制作一个非常基本的宾果号码机。 https://codepen.io/ryantinsley/pen/LdOvgL我生成了一个包含 20 个数字的数组,将它们打乱顺序,每次绘制一个时我都会在板上添加一个标记。我有一个由两部分组成的问题,我知道这对你们中的一些人来说真的很简单,但它让我发疯。

第 1 部分 我添加了一个重置​​按钮,它接受标记为红色的方 block 并删除类。然而,我想做的是我还没有弄清楚的是,我想在每次按下重置按钮时重新排列我的数组。

第 2 部分 作为增加此显示功能的一部分,我还添加了一个前面的数字部分,显示最后选择的数字。尽管我确信有更好的方法可以做到这一点,但我已经设法使其在某种程度上发挥作用。我也在努力隐藏始终显示在开头的“未定义”输入。但我确信有一种方法可以做到这一点,无论如何我都不需要隐藏未定义的类

提前感谢您的所有帮助,您太棒了。

附言我现在只想在纯 JavaScript 中工作。

// This bit shuffles an array

function shuffle(array) {
    var i = array.length,
        j = 0,
        temp;
        
    while (i--) {
        j = Math.floor(Math.random() * (i+1));

        // swap randomly chosen element with current element
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    return array;
}

// Array input

var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]);

//This bit calls the position of the array
var f = 0;
var g = -1;
// the index of the current item to show

function nextNumber() {
  var randNum = ranNums[f++];
    document.getElementById('current').innerHTML = randNum; 
    
    if (f == ranNums.length) f = 0;   // reset to first element if you've reached the end
  
    document.getElementById("item" + randNum).className = "red";
}

function lastNumber() {
  var past = ranNums[g++];
    document.getElementById('previous').innerHTML = past;
  
  if(past === "undefined") {
    document.getElementById('previous').style.display='none';
  }
}






 // Removes the class and resets the game
function resetNumbers() {
    for (var i = 0; i < ranNums.length; i++) {
       document.getElementById("item" + ranNums[i]).className = "";
      
    }
}
body {
  background-color: white;
  color: black;
  font-size: 20px;
  font-family: "Lucida Grande", Verdana,Arial, Helvetica, sans-serif;
}


h1, th {
  font-family: Georgia, "Times New Roman",Times, serif;
}


h1 {
  font-size: 28px;
}


table {
  border-collapse: separate;
  border-spacing: 30px;
  float: left;
}


th, td {
  padding: 30px;
  border: 2px black solid;
  text-align: center;
  width: 20%;
}

h2 {
  
}

button {
  
}

.red {
  background-color: red;
}
<h1>Bingo!</h1>
<h4>Current Number</h4>
<h2 id="current"></h2>
<h4>Previous Number</h4>
<h2 id="previous"></h2>
<table>
  <tr>
    <td id="item1"<h1>1</h1></td>
    <td id="item2"<h1>2</h1></td>
    <td id="item3"<h1>3</h1></td>
    <td id="item4"<h1>4</h1></td>
    <td id="item5"<h1>5</h1></td>
  </tr>
  <tr>
    <td id="item6"<h1>6</h1></td>
    <td id="item7"<h1>7</h1></td>
    <td id="item8"<h1>8</h1></td>
    <td id="item9"<h1>9</h1></td>
    <td id="item10"<h1>10</h1></td>
  </tr>
  <tr>
    <td id="item11"<h1>11</h1></td>
    <td id="item12"<h1>12</h1></td>
    <td id="item13"<h1>13</h1></td>
    <td id="item14"<h1>14</h1></td>
    <td id="item15"<h1>15</h1></td>
  </tr>
  <tr>
    <td id="item16"<h1>16</h1></td>
    <td id="item17"<h1>17</h1></td>
    <td id="item18"<h1>18</h1></td>
    <td id="item19"<h1>19</h1></td>
    <td id="item20"<h1>20</h1></td>
  </tr>
</table>


<button onclick="nextNumber(); lastNumber();">Next Number</button>

<button onclick="resetNumbers()">Reset</button>

最佳答案

你可以检查前面的数字字段是否被定义,如果是则只显示一个值:

document.getElementById('previous').innerHTML = past ? past : '';

这是使用三元运算符,并做同样的事情:

if (past) {//check if past is not null or undefined
  document.getElementById('previous').innerHTML = past;
else {
  document.getElementById('previous').innerHTML = '';
}

修改后的码笔:codepen

关于javascript - 初学者javascript,显示数组中的前一个数字并重置函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49553839/

相关文章:

javascript - 无法在动态生成的文本区域中输入内容

php - 使用 PHP 函数自动将宽度和高度属性添加到 <img> 标签

javascript - 表单和浏览器的后退按钮

css - IE6中圆 Angular 和问题的绝对位置

Javascript [数据标签] 在 Firefox 中工作,而不是在 Chrome 中工作

javascript - Angular 输入[类型=日期]。没有显示任何值

javascript - 将 getJSON 与变量一起使用

html - 基于 Bootstrap 的导航以及下拉支持,以使用全宽显示均匀间隔的导航

javascript - 如何使用bind()代替live()?

jquery - 有没有一种方法可以让图像随着浏览器高度的变化而调整大小?