javascript - 克隆循环问题

标签 javascript jquery

我做了一个简单的文件上传,在拖放 ID 时喜欢为每个克隆 4 个输入字段(文件名、替代文本),我尝试了不同的方法。 但问题是它被克隆的频率比它应该的要高得多。

在我在 Jsfiddle 上的示例中,我模拟了 5 个文件,但它被克隆了 ~15 次而不是 4 次。

$('button').click(function(){
  var  lol = 5;

  for (var i = 0; i < lol; i++) {			
    if(i > 0){
     var $newCustomer = $('#clonemulti').clone();
      $newCustomer.removeAttr('id');

      $newCustomer.insertAfter( ".clonemulti" );	 
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="clonemulti" id="clonemulti">	  						
    <input type="text"  class="filenameauto" name="filename[]" placeholder="" title="Dateiname" maxlength="20" required>

      <input type="text" placeholder="Alt. Text (de)" name="alttext[]" maxlength="50" required>
      <input type="text" placeholder="Alt. Text (it)" name="alttext[]" maxlength="50" required>
      <input type="text" placeholder="Alt. Text (en)" name="alttext[]" maxlength="50" required>

    <br/><br/>
</div>	
<button>clone</button>

最佳答案

问题是因为 .insertAfter(".clonemulti")每个 现有 .clonemulti 元素之后添加新行。

要实现您的要求,请更改选择器,以便在该元素的最后一个实例之后插入它们:

$newCustomer.insertAfter(".clonemulti:last");

另请注意,当您可以在循环中将 i 初始化为 1 时,您的 if (i > 0) 条件是多余的。这是更新后的 JS 的完整示例:

$('button').click(function() {
  var lol = 5;

  for (var i = 1; i < lol; i++) {
    var $newCustomer = $('#clonemulti').clone();
    $newCustomer.removeAttr('id');
    $newCustomer.insertAfter(".clonemulti:last");
  }
});

关于javascript - 克隆循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55923411/

相关文章:

javascript - 使用 Play Framework 以 JSON 格式提交表单

javascript - jQuery ajax,附加数据有效但数据对另一端(计算机/用户)可见吗?

javascript - 将 jquery 选择器转换为数组

jquery - 如何将其编写为函数

javascript - 自动双重应用

javascript - 有没有办法将 javascript 链接到外部 css 文件中的特定样式?

javascript - 使用 XMLHttpRequest 发送图像并使用 php 抓取

javascript - 在 AJAX 调用中使用 "context:..."的正确方法是什么?

javascript - jQuery 颜色动画下降到 "white"

jquery - 单击时将带有 jQ​​uery 的图标添加到选择器