javascript - 具有多个动态字段的文本框或文本区域

标签 javascript jquery html terminal-emulator

有没有办法创建一个基于网络的 <input type="text"><textarea>它能够动态地向自身添加字段,以便用户可以通过选项卡浏览可用的 friend 并输入表单数据?

我四处搜索并找到了一个几乎可以满足我需要的终端模拟器。在下图演示中,用户输入 SCHEDL进入文本区域并按选项卡按钮。一旦按下选项卡按钮,程序就会检查命令,在本例中为 SCHEDL ,并查找与该命令关联的可用字段。然后,它用可以输入和选项卡切换的字段填充文本区域。

enter image description here

最佳答案

这是您正在寻找的原型(prototype)。我使用了输入标签,但可以轻松地用文本区域替换它。

无论如何,要实现这一目标;

  1. 创建模型。我想到使用 JSON 对象,因为我们可以将其建模为 命令和子/参数的层次结构。
  2. 捕获选择输入字段时的“TAB”点击。
$(document).on('keydown', '.terminal', function(e) {
    var keyCode = e.keyCode || e.which;

    if (keyCode == 9) {
      e.preventDefault();

      // do something if tab is clicked
    }
});
  • 然后使用 $.each()

    通过模型比较输入字段的值
  • 如果匹配,则循环遍历 SUB 属性并将它们添加到文本框。 inputField.val(inputField.val() + ""+ v2.Name);

  • <小时/>

    运行下面的代码片段。尝试输入 SCHEDL,然后按 TAB 键。尝试输入 TEST,然后按 TAB。

    var commandJson = {
      "Commands": [{
          "Name": "SCHEDL",
          "Sub": [{
              "Name": "From:"
            },
            {
              "Name": "To:"
            }
          ]
        },
        {
          "Name": "TEST",
          "Sub": [{
              "Name": "A:"
            },
            {
              "Name": "B:"
            }
          ]
        }
      ]
    };
    
    $(document).ready(function() {
      $(document).on('keydown', '.terminal', function(e) {
        var inputField = $(this);
        var inputValue = inputField.val();
        var keyCode = e.keyCode || e.which;
    
        if (keyCode == 9) {
          e.preventDefault();
    
          // loop through the COMMANDS
          $.each(commandJson.Commands, function(k1, v1) {
            if (inputValue.toUpperCase() == v1.Name) {
    
              // if the command matches the input, loop through SUB and display in textbox
              $.each(v1.Sub, function(i2, v2) {
                inputField.val(inputField.val() + " " + v2.Name);
              });
            }
          });
        }
      });
    });
    .terminal {
      width: 100%;
      line-height: 20px;
      padding: 5px;
    }
    <input class="terminal" />
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    关于javascript - 具有多个动态字段的文本框或文本区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58815640/

    相关文章:

    php - 如何使用 jQuery 发布数据

    html - 如何在更改分辨率时使 div 响应

    javascript - 触摸结束后,是否有任何事件可以在 iOS 设备上使用 jQuery 检测动量滚动?

    javascript - 如何使用 JavaScript 为简单的进度条制作动画?

    html - 如何让标题和导航栏出现在同一行?

    javascript - 使用 JavaScript DOM 使用对象数组重写数据属性数组

    javascript - 将列的鼠标悬停区域限制为其自身形状与周围区域

    javascript - 如何旋转 WebGL 曲面分割中的各个三 Angular 形?

    javascript - 为什么 ngAnimate 不在 div 上工作?

    javascript - 使用 jQuery 将背景颜色添加到输入文本中