动态生成输入 ID

Generating Ids of inputs dynamically

我正在开发一个应用程序,该应用程序在一行中有一些输入字段,在侧面 有一个附加图标,当用户单击该图标时,会动态添加一个包含输入字段的附加行.我想在用户单击添加按钮图标时动态生成进程输入字段的 ID。

请帮忙?

标记代码

    <div>
        <input type="text" name="1" size="4" id="inp1" value="">
        <input type="text" name="2" size="4" id="inp2"  value="">
        <input type="text" name="3" size="4" id="inp3"  value="">
        <input type="text" name="4" size="4" id="inp4"  value="">
        <input type="text" name="5" size="4" id="inp5"  value="">  +   
    </div>
//Icon to add another row of input fields dynamically
<i class="fas fa-plus"></i>

for (let i = 0; i < 10; i++) {
  let input = document.createElement('input');
 input.id = 'input' + i;
  document.querySelector('div').appendChild(input);
}
<div></div>

您只需要知道要添加的元素的下一个 index/number,以确保它是唯一的并且遵循您已经为 pre-existing 元素设置的编号。

因为你想以 5 个为一组添加输入(并分组在一个新的 <div> 中),我建议你添加一个外部包装元素,以便我们可以注入新的 <div>(和内部 5 个新 <input> 元素)正确。

每次单击按钮时,您都需要创建一个新容器 <div>,然后使用简单的 for 循环迭代添加 5 个新的 <input> 元素。在每次迭代中,您递增唯一 ID:

// Starting number of inputs
let count = 5;

// Wrapper
const wrapper = document.querySelector('#wrapper');

document.querySelector('#btn').addEventListener('click', () => {

  const container = document.createElement('div');
  
  for (let i = 0; i < 5; i++) {
    // Increment the count to ensure that it is unique
    count++;

    // Create your new `<input>` element
    const input = document.createElement('input');
    input.type = 'text';
    input.name = count;
    input.size = '4';
    input.id = `inp${count}`;

    container.appendChild(input);
    
    // Optional: add empty whitespace after each child
    container.append(document.createTextNode(' '));
  }
  
  wrapper.appendChild(container);
});
<div id="wrapper">
<div>
  <input type="text" name="1" size="4" id="inp1" value="">
  <input type="text" name="2" size="4" id="inp2" value="">
  <input type="text" name="3" size="4" id="inp3" value="">
  <input type="text" name="4" size="4" id="inp4" value="">
  <input type="text" name="5" size="4" id="inp5" value="">
</div>
</div>
<button type="button" id="btn">Add new input group</button>

简单完成:

var inputContainer = document.getElementById("inputContainer"),
  cnt = 1;

function generateInput() {
  cnt++;
  inputContainer.innerHTML += '<input type="text" name="' + cnt + '" size="4" id="inp' + cnt + '" value="">';
}
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/all.css" integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay" crossorigin="anonymous">


<div id="inputContainer">
  <input type="text" name="1" size="4" id="inp1" value="">
</div>

<i class="fas fa-plus" onclick="generateInput()"></i>

在我的示例中,我只是在每次调用 generateInput() 函数时递增 cnt var - 然后将输入附加到 inputContainer 及其新的唯一值 nameid

希望对您有所帮助!

这个怎么样? (我已将“添加”按钮放在包含输入的 DIV 之外,但如果您愿意,它可以放在里面。)

<div class="inputSet">
    <input type="text" name="1" size="4" id="inp1" value="">
    <input type="text" name="2" size="4" id="inp2"  value="">
    <input type="text" name="3" size="4" id="inp3"  value="">
    <input type="text" name="4" size="4" id="inp4"  value="">
    <input type="text" name="5" size="4" id="inp5"  value="">
</div>
<button onclick="addInputSet(this);">ADD</button>
<i class="fas fa-plus"></i>

Javascript:

var rowCount = 5;
function addInputSet(btn) {
    var row = document.querySelector('div.inputSet').cloneNode(true);
    var inputs = row.getElementsByTagName('input');
    for(var i of inputs) {
        i.name = (++rowCount).toString();
        i.id = 'inp' + rowCount;
    }
    btn.parentNode.insertBefore(row,btn);
}