如何使用按钮使用 JavaScript 对数组进行计数?

Posted

技术标签:

【中文标题】如何使用按钮使用 JavaScript 对数组进行计数?【英文标题】:How do I use a button to count through an array using JavaScript? 【发布时间】:2019-07-16 11:25:35 【问题描述】:

如何使用按钮通过 javascript 对数组进行计数?

我的代码:

var dataset = ["A", "B", "C", "D", "E"];
var counter = 0;

function onClick() 
  counter++;
;

document.write(dataset[counter]);
<button type="button" onClick="onClick()">Click me</button>

我想先打印“A”,点击按钮时再打印“B”,以此类推。

我当前的代码不起作用。如何修复代码以实现此目的?

【问题讨论】:

【参考方案1】:

您需要一个输出的目标元素,因为如果页面完成,您将创建一个新的 html 文档。

请看这里:Why is document.write considered a "bad practice"?

function onClick() 
    if (counter < dataset.length) 
        document.getElementById('output').innerHTML += dataset[counter++] + ' ';
    
;

var dataset = [ "A" , "B" , "C" , "D" , "E" ],
    counter = 0;
<button type="button" onClick="onClick()">Click me</button>
<div id="output"></div>

【讨论】:

现在完美了 += on .innerHTML is considered a bad practice too, according to this. @CodeF0x,对,有很多作业。但在这里,不是。【参考方案2】:

你应该把它写在onClick()函数里面。这样每当用户点击按钮时,onClick() 函数就会被调用并使用 innerHTML 属性更改元素中的值。

最好单独创建一个元素并更改其值,而不是使用document.write

var dataset = ["A", "B", "C", "D", "E"];
var counter = 0;

function onClick() 
  
    const para = document.getElementById('para');
    para.innerHTML = dataset[counter];
    if(counter < (dataset.length-1)) 
      counter++;
     else 
      counter = 0; 
    

;
<button type="button" onClick="onClick()">Click me</button>
<p id="para"></p>

【讨论】:

【参考方案3】:

这对你有帮助

  var dataset = ["A", "B", "C", "D", "E"];
  var counter = 0;

  function onClick() 
    document.getElementById("in").innerHTML = dataset[counter];
    counter++;
    if(counter == dataset.length) counter = 0;
  ;
<button type="button" onClick="onClick()">Click me</button>
<p id ="in"></p>

【讨论】:

【参考方案4】:

您在底部的脚本只会在页面加载时运行一次,因此它不知道counter 正在发生变化。相反,您可以将文档写入添加到您的 onClick 方法中。

此外,此时您正在将字母附加到正文中,替换之前的所有内容,包括按钮。相反,您可以创建一个 div 来保存从数组中提取的结果字母。

此外,我建议您使用counter % dataset.length,以便每次到达数组末尾时都会环绕您的字母:

<script type="text/javascript">
  var dataset = ["A", "B", "C", "D", "E"];
  var counter = 0;

  function onClick() 
    document.getElementById("res").textContent = (dataset[counter % dataset.length]);
    counter++;
  ;
</script>

<button type="button" onClick="onClick()">Click me</button>

<div id="res"></div>

【讨论】:

【参考方案5】:

您可以拥有一个 div 并将其定位为 onClick 并使用 innerHTML 将数据集中的值添加到它

<script type="text/javascript">
var dataset = [ "A" , "B" , "C" , "D" , "E" ];
var counter = 0;
function onClick() 
document.getElementById('data').innerHTML = dataset[counter]
  counter++;
  counter = counter % 5
;

</script>

<button type="button" onClick="onClick()">Click me</button>
<div id='data'></div>

【讨论】:

【参考方案6】:

var dataset = ["A", "B", "C", "D", "E"];
var counter = 0;

function onClick() 
/* If you want the previous result to be removed and new result to appear use the below code*/
/*document.getElementById("result").innerHTML =dataset[counter]; */
/* Or if you want to append the result, retaining the previous result use this  */
document.getElementById("result").innerHTML+=(dataset[counter] + ", ");
   
  counter++;
  if(counter == 5)
    counter = 0;
  
;
<button type="button" onClick="onClick()">Click me</button>
<div id='result'></div>

【讨论】:

【参考方案7】:

点击执行的代码是:

function onClick() 
  counter++;

如您所见,计数器增加但屏幕未刷新。要解决此问题,您可以考虑在函数内复制document.write(counter),但第一次单击按钮时document.write 会覆盖原始HTML,并且按钮会消失:

counter = 0;
document.write(counter);

function onClick() 
  counter++;
  document.write(counter);
&lt;button onclick="onClick()"&gt;increase&lt;/button&gt;

要正确刷新屏幕,您需要知道DOM 是什么。粗略地说,DOM(文档对象模型)相当于 JavaScript 世界中的 HTML 文档。借助 DOM,您可以使用 JavaScript 操作 HTML 文档。

将 HTML 文档视为具有父元素和子元素的树(例如,&lt;html&gt; 有两个子元素,&lt;head&gt;&lt;body&gt;)。这棵树的根是文档本身,文档的第一个子元素是&lt;html&gt; 元素。在 JavaScript 世界中,可以在名为 document 的预先存在的变量中找到该文档。您可以要求document 为您找到一些后代元素,如下所示:

html = document.children[0];
buttons = document.getElementsByTagName("button");

您还可以逐个操作元素。例如,如果你想改变按钮内的文字,你可以这样做:

button = buttons[0]; // first button found in the tree
button.textContent = "counter plus plus";

基于这些知识,这里有一个在点击时打印计数器的可能解决方案:

counter = 0;

function onClick() 
  counter++;
  var span = document.getElementById("counter");
  span.textContent = counter;
<button onclick="onClick()">increment</button>
<span id="counter">0</span>

我想你可以自己完成这项工作:-)

【讨论】:

以上是关于如何使用按钮使用 JavaScript 对数组进行计数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jquery或javascript对对象数组进行排序[重复]

如何使用一些静态值在javascript中对数组进行排序?

如何使用正则表达式对数组中的 Javascript 对象进行排序

如何使用javascript对属性上的数组进行分组以在特定键处获得每个组的聚合值?

如何对 Javascript 对象进行排序,或将其转换为数组?

JavaScript如何实现对数组元素的插入、删除、替换