【问题标题】:Use a button to display one array string at a time in Javascript在Javascript中使用一个按钮一次显示一个数组字符串
【发布时间】:2020-10-10 19:26:27
【问题描述】:

我正在创建一个文本生成器,它按从上到下的顺序一次循环遍历数组字符串,每次按下按钮时都会更改为下一个字符串。下面的函数按顺序循环遍历字符串,但在按一下按钮后它会重复所有这些字符串。如何让函数等待显示下一个字符串,直到再次按下按钮?

function newThing() {
    var i = 0;
    setInterval(function() {
    document.getElementById('thingDisplay').innerHTML = oddthing[i++];
    if (i == oddthing.length) i = 0;
    }, newThing.active);
}

var oddthing = [
'<p>111111111</p>',
'<p>222222222</p>',
'<p>333333333</p>',
'<p>444444444</p>',
'<p>555555555</p>',
'<p>666666666</p>',
'<p>777777777</p>',
'<p>888888888</p>',
'<p>999999999</p>'
]
<div>
  <div align="center" id='thingDisplay'></div>
</div>

<div>
  <button class="box" id="button01" onclick="newThing()">New Thing</button>
</div>

<script src="javascript.js"></script>

【问题讨论】:

    标签: javascript html arrays string button


    【解决方案1】:

    这是一种方法:

    var oddthing = [
    '<p>111111111</p>',
    '<p>222222222</p>',
    '<p>333333333</p>',
    '<p>444444444</p>',
    '<p>555555555</p>',
    '<p>666666666</p>',
    '<p>777777777</p>',
    '<p>888888888</p>',
    '<p>999999999</p>'
    ]
    
    // add a global counter
    var count = 0;
    
    function newThing() {
        document.getElementById('thingDisplay').innerHTML = oddthing[count];
        count++;
        if (count >= oddthing.length) count = 0;
    }
    

    【讨论】:

    • 需要点击 2 次才能在第一个项目到达最后一个项目时显示。自己试试。可以通过在答案编辑器中单击&lt;&gt; 将其放入堆栈 sn-p 以在页面中运行它
    • 我也注意到了这一点。这似乎是目前领先的解决方案,那么可以做些什么来防止每次回收都需要双击?
    • if() 之后插入html,以便修改所有案例的内容
    • @guyw 我已经更新了我的答案来解决这个问题 =)
    • 你是英雄!谢谢你。两周来我一直在努力学习如何做到这一点。
    【解决方案2】:

    删除setInterval,并在函数外声明i

    function initDisplay($btn, $display, array) {
      var i = 0;
      $btn.addEventListener('click', function() {
        $display.innerHTML = array[i++];
        if (i >= array.length) i = 0;
      });
    }
    
    initDisplay(
      document.getElementById('button01'),
      document.getElementById('thingDisplay'), [
        '<p>111111111</p>',
        '<p>222222222</p>',
        '<p>333333333</p>',
        '<p>444444444</p>',
        '<p>555555555</p>',
        '<p>666666666</p>',
        '<p>777777777</p>',
        '<p>888888888</p>',
        '<p>999999999</p>'
      ]
    );
    
    initDisplay(
      document.getElementById('button02'),
      document.getElementById('thingDisplay2'), [
        '<p>AAAAA</p>',
        '<p>BBBBB</p>',
        '<p>CCCCC</p>'
      ]
    );
    <div>
      <div align="center" id='thingDisplay'>&nbsp;</div>
      <button class="box" id="button01">New Thing</button>
    </div>
    
    <div>
      <div align="center" id='thingDisplay2'>&nbsp;</div>
      <button class="box" id="button02">New Thing 2</button>
    </div>
    
    <script src="javascript.js"></script>

    【讨论】:

    • 谢谢,这在使用单个数组时非常有用!我正在构建的网页包括用户可以选择的多个数组、单选框和类别。每个单选框确定从哪个数组中提取字符串。出于某种原因,当放置在几个 if 语句中时,此解决方案往往只显示第二个和第四个字符串。
    • @guyw 我更新了我的答案,让它可以与多个“显示器”一起使用。不知道这是否是你想要达到的目标。否则,也许编辑您的问题以提供更多背景信息
    • 该页面对多个数组使用单个显示和按钮。例如,数组“oddthing”包含从“1111111”到“999999”的字符串。用户需要选择一个名为“oddthing”的单选框,以便按钮从“oddthing”中提取字符串。该页面有多个单选框,它们分别指向各自的数组。希望这是有道理的。我为我缺乏细节而道歉;我是该网站的新手,正在学习中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多