生成具有唯一名称和 ID 的动态输入

Posted

技术标签:

【中文标题】生成具有唯一名称和 ID 的动态输入【英文标题】:Generate Dynamic Inputs with Unique Names & IDs 【发布时间】:2019-01-24 14:49:32 【问题描述】:

我正在构建一个 Web 表单,在表单中,可以通过单击按钮动态添加其他输入框。我已经完成了这部分工作,但是我需要每个输入都有一个唯一的nameid

例如;

<input type="text" name="inventory_number[0]" id="inventory_number[0]">
<input type="text" name="inventory_number[1]" id="inventory_number[1]">
<input type="text" name="inventory_number[2]" id="inventory_number[2]">

目前他们都有相同的nameid

<input type="text" name="inventory_number[]" id="inventory_number[]">
<input type="text" name="inventory_number[]" id="inventory_number[]">
<input type="text" name="inventory_number[]" id="inventory_number[]">

下面是我的代码以及fiddle。任何帮助表示赞赏。

HTML

<div class="control-group field_wrapper">
  <label class="control-label"><strong> Inventory Number 1</strong></label>
  <div class="controls">
    <div class="input-prepend">
      <input type="text" class="input-medium" name="inventory_number[]" id="inventory_number[]">
      <button class="btn btn-success add-number" type="button" title="Add MAC Address"><i class="icon-plus"></i> </button>
    </div>
  </div>
</div>
<div class="additionalNumber"></div>

JQuery

var maxField = 10; 
var addButton = $('.add-number'); 
var wrapper = $('.additionalNumber'); 
var fieldhtml = '<div class="control-group field_wrapper"><label class="control-label"><strong> Inventory Number x</strong></label><div class="controls"><div class="input-prepend"><input type="text" class="input-medium"  name="inventory_number[]" id="inventory_number[]"><button class="btn btn-danger remove" type="button"><i class="icon-remove"></i> </button></div></div></div>';
var x = 1;
$(addButton).on('click', function(e) 
  if (x < maxField) 
    x++;
    $(wrapper).append(fieldHTML);
  
  if (x >= maxField) 
    alert('Limited to 10.');
  
);
$(wrapper).on('click', '.remove', function(e) 
  e.preventDefault();
  $(this).parents('.control-group').remove();
  x--; 
);

如果有更简单/更有效的方法来实现上述目标,我愿意接受建议。

【问题讨论】:

为什么你需要一个不同的名字?我认为在您的情况下,最好的解决方案是像您一样使用数组名称约定。 【参考方案1】:

将fieldHtml设为函数并传入x

//JQuery

var maxField = 10; 
var addButton = $('.add-number'); 
var wrapper = $('.additionalNumber'); 
function fieldHTML(inputNumber) 
    return `<div class="control-group field_wrapper"><label class="control-label"><strong> Inventory Number $inputNumber</strong></label><div class="controls"><div class="input-prepend"><input type="text" class="input-medium"  name="inventory_number[$inputNumber]" id="inventory_number[$inputNumber]"><button class="btn btn-danger remove" type="button"><i class="icon-remove"></i> Remove</button></div></div></div>`;

var x = 1;
$(addButton).on('click', function(e) 
  if (x < maxField) 
    x++;
    $(wrapper).append(fieldHTML(x));
  
  if (x >= maxField) 
    alert('Limited to 10.');
  
);
$(wrapper).on('click', '.remove', function(e) 
  e.preventDefault();
  $(this).parents('.control-group').remove();
  x--; 
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<div class="control-group field_wrapper">
  <label class="control-label"><strong> Inventory Number 1</strong></label>
  <div class="controls">
    <div class="input-prepend">
      <input type="text" class="input-medium" name="inventory_number[]" id="inventory_number[]">
      <button class="btn btn-success add-number" type="button" title="Add MAC Address"><i class="icon-plus"></i> Add</button>
    </div>
  </div>
</div>
<div class="additionalNumber"></div>

【讨论】:

发布你的小提琴链接 jquery 版本在这里没有区别。我在那个小提琴链接中看不到任何尝试?肯定复制我上面所做的:) 抱歉,我的错!它完美地工作。我在 return 中使用了不正确的引号 - 我使用的是 ' ' 而我应该使用 ` ` - 我没有意识到这有什么不同?! 使用反引号```被称为字符串模板,里面的变量用美元/大括号访问,像这样:`some text and $vars1`

以上是关于生成具有唯一名称和 ID 的动态输入的主要内容,如果未能解决你的问题,请参考以下文章

创建具有唯一 ID 的动态 div - jQuery

如何使用jquery生成动态输入并通过id获取值

似乎无法使用动态生成的元素ID

如何循环动态生成的按钮并相应地创建输入字段

当id与输入框名称扩展名id匹配时,如何在单列中将动态输入框值插入表中

设计模式 Doctrine ORM - 根据输入生成唯一名称