【问题标题】:Javascript add letter after specific number of letters in a loopJavascript在循环中特定数量的字母后添加字母
【发布时间】:2016-12-06 10:58:30
【问题描述】:

如果输入文本字段超过 5 个字母,我正在尝试在输入文本字段中添加 br 符号。(在书写时)

我的代码在 5 个字母后创建 br 符号,但它创建的 br 符号多于 1 个。

代码:

(function(i){
    $('#input' + i).on('keyup', function() {
        if($('#input' + i).val().length > 5) {
            $('#input' + i).val($('#input' + i).val() + '<br>');
        }
    });
}(i))

【问题讨论】:

  • 不要在用户键入时更改输入的内容。它弄乱了插入点的位置并造成了可怕的用户体验。格式化之后,或者提供一个分割控件而不是单个输入(这样做不好也会导致糟糕的用户体验)。
  • 另请注意,keyup 每次按键操作仅触发一次,不是每个添加到输入的字母一次。按住一个键是上述中断的一种方式。
  • @T.J.Crowder 有没有办法总结所有动作?

标签: javascript jquery loops variables this


【解决方案1】:

我强烈建议不要这样做(似乎对问题有意见)。

但是,如果您真的想要,请使用input,而不是keyup,删除之前添加的&lt;br&gt; 标记,然后拆分整个字符串,而不仅仅是在末尾附加。见 cmets:

(function(i) {
  $('#input' + i).on('input', function() {
    // No need to look it up repeatedly, remember the jQuery wrapper for this input
    var $this = $(this);
    // Get the value
    var val = $this.val();
    if (val.length > 5) {
      // Remove old <br>s
      val = val.replace(/<br>/g, "");
      // Add new ones
      var result = "";
      while (val) {
        result += val.substring(0, 5);
        val = val.substring(5);
        if (val) {
          result += "<br>";
        }
      }
      // Set the value
      $this.val(result);
    }
  });
}(0))
<input type="text" id="input0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【讨论】:

  • 你会推荐使用输入而不是keyup吗?
  • @utdev:是的,这就是为什么我建议使用input 而不是keyup。请参阅有关问题的评论以了解原因。
  • 再次感谢我发现了一个小错误/错误,如果我复制文本并将其粘贴到无法正常工作的输入文本中
  • @utdev:对我有用。 “无法正常工作”是什么意思? 如何不能正常工作?
  • 例如,如果我将单词“name”复制到输入字段并添加 3 个字母,我不会得到 br 符号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 2016-02-23
  • 2021-08-22
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多