如何克隆div多次包含多个输入字段?

时间:2016-06-07 03:28:24

标签: jquery clone

我在这里已经阅读了一些解决方案,但我仍然无法弄清楚为什么我的div拒绝不止一次克隆。

这是我的html

<h4 class="ui dividing header">Maklumat Ahli Keluarga</h4>
    <div class="input_fields_wrap">
        <button class="add_field_button">Add More Fields</button>
        <div class="ahli_keluarga" id="ahli_keluarga1">
            <div class="field">
                <label>Nama</label>
                   <div class="field">
                   <input type="text" name="shipping[first-name]" placeholder="Nama Penuh">
                   </div>
            </div>
        </div>
    </div>

这是我的剧本:

<script type="text/javascript">
$(document).ready(function() {
    var max_fields      = 10; //maximum div allowed
    var wrapper         = $(".input_fields_wrap"); //Fields wrapper
    var add_button      = $(".add_field_button"); //Add button ID
    var clone           = $( ".ahli_keluarga:first").clone().append('<a href="#" class="remove_field">Remove</a>');

    var x = 1; //initlal div count
    $(add_button).click(function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ //max div allowed
            x++; //div increment
            $(wrapper).append(clone); //
        }
    });

    $(wrapper).on("click",".remove_field", function(e){ //user click on remove text
        e.preventDefault(); $(this).parent('div').remove(); x--;
    })
});
</script>

克隆有效,但只能克隆div一次。

2 个答案:

答案 0 :(得分:3)

$(document).ready(function() {
var max_fields      = 10; //maximum input boxes allowed
var wrapper         = $(".input_fields_wrap"); //Fields wrapper
var add_button      = $(".add_field_button"); //Add button ID

var x = 1; //initlal text box count
add_button.click(function(e){ //on add input button click
    e.preventDefault();
    if(x < max_fields){ //max input box allowed
        x++; //text box increment
        var clone = $( ".ahli_keluarga:first").clone().append('<a href="#" class="remove_field">Remove</a>');
        wrapper.append(clone); //
    }
});

wrapper.on("click",".remove_field", function(e){ //user click on remove text
    e.preventDefault(); $(this).parent('div').remove(); x--;
})

});

在您的活动中,无需再次提供选择器

add_button.click
wrapper.on("click"

编辑:我将事件中的克隆移动到克隆一个新实例,而不是插入DOM中的同一个实例。

我还为你创造了一个小提琴:https://jsfiddle.net/hpyzzcj9/

答案 1 :(得分:3)

每次单击add时都需要克隆节点,否则它只会引用已存在的元素。此外,您的wrapper已经是一个jQuery元素,因此无需包含$()

更改此行:

$(wrapper).append(clone);

wrapper.append(clone.clone());

如果你想看到它正在运行,下面有一个完整的运行代码段。

$(document).ready(function() {
  var max_fields      = 10; //maximum div allowed
  var wrapper         = $(".input_fields_wrap"); //Fields wrapper
  var add_button      = $(".add_field_button"); //Add button ID
  var clone           = $(".ahli_keluarga:first").clone().append('<a href="#" class="remove_field">Remove</a>');

  var x = 1; //initlal div count
  $(add_button).click(function(e){ //on add input button click
    e.preventDefault();
    if(x < max_fields){ //max div allowed
      x++; //div increment
      wrapper.append(clone.clone()); //
    }
  });

  $(wrapper).on("click",".remove_field", function(e){ //user click on remove text
    e.preventDefault(); $(this).parent('div').remove(); x--;
  })
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<h4 class="ui dividing header">Maklumat Ahli Keluarga</h4>
<div class="input_fields_wrap">
  <button class="add_field_button">Add More Fields</button>
  <div class="ahli_keluarga">
    <div class="field">
      <label>Nama</label>
      <div class="field">
        <input type="text" name="shipping[first-name]" placeholder="Nama Penuh">
      </div>
    </div>
  </div>
</div>