【问题标题】:Each input letter is returned on individual line每个输入字母在单独的行上返回
【发布时间】:2017-04-20 01:12:18
【问题描述】:

正如标题所示,我希望输入字段中的每个字母都使用 while 循环显示在新行上。例如,如果有人在输入框中输入“猫”,则会返回:

c

一个

t

这是我目前所拥有的,但目前它只显示第一个字母。

 var input = document.getElementById('userinput').value;
  var i  = input.length;
  while (i--) {
    document.getElementById('message').innerHTML = (input[i]);
  }

【问题讨论】:

    标签: javascript loops while-loop


    【解决方案1】:

    行:

    document.getElementById('message').innerHTML = (input[i]);
    

    完全覆盖了#message元素的HTML,所以它只会有最后一次迭代的值。相反,你会想做:

    document.getElementById('message').innerHTML += (input[i]) + "<br />";
    

    随着&lt;br /&gt; 移动到新行。要以自上而下的方式使用它,您可能需要使用普通的 for 循环:

    for(var i = 0; i < input.length; i++)
        document.getElementById('message').innerHTML += input[i] + "<br />";
    

    下面是一个基本的 sn-p 示例(按回车键或取消聚焦将触发事件):

    document.getElementById('text').addEventListener("change", function(){
      document.getElementById('message').innerHTML = "";
      input = document.getElementById('text').value;
      for(var i = 0; i < input.length; i++)
          document.getElementById('message').innerHTML += input[i] + "<br />";
    });
    <input id="text" type="text" />
    <div id="message"></div>

    【讨论】:

    • 感谢这完美的作品!只是这样我可以学习,当我使用 while 循环时,输入是如何反向(向下)返回的?
    • 因为您的 while 循环从最后一个字符开始,并在最后一次迭代中转到第一个字符,而这个 for 循环从第一个字符开始并转到最后一个字符。
    • 请注意,作为一般原则,最好在一个变量中建立所需的输出,然后在循环之后将一次分配给.innerHTML - 对 DOM 的更新越少越好。 (另外,循环没有什么问题,但我会使用.innerHTML = input.split("").join("&lt;br&gt;")。)
    • 另外,“
      ”是 XHTML 的遗留物。某些 IDE 可能更喜欢它,因为解析 XML 比 HTML 更简单,但在浏览器中,HTML 解析器只会将“/”视为垃圾。
    • 啊谢谢你的澄清!只是好奇,有没有办法在不反转输入的情况下使用 while 循环?
    猜你喜欢
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2016-12-23
    • 2014-06-06
    • 2016-07-01
    • 1970-01-01
    • 2013-10-04
    • 2023-02-11
    相关资源
    最近更新 更多