简体   繁体   English

克隆select2选项

[英]Cloning select2 options

I am trying to clone a select2 with it's options but it doesn't seem to work. 我正在尝试使用它的选项克隆一个select2,但它似乎不起作用。

I tried to destroy before recreating, to remove the span before recreating, but nothing works. 我尝试在重新创建之前销毁,在重新创建之前删除跨度,但是没有任何效果。 Here is the basic code. 这是基本代码。

HTML : HTML:

<div class="container">
  <div class="row" id="row_0">
    <div class="col-md-12">
      <form id="form_0" onsubmit="return false;">
        <select class="select2" name="test1" id="test1_0">
          <option value="o_test">o_test1_1</option>
          <option value="o_test">o_test1_2</option>
          <option value="o_test">o_test1_3</option>
        </select>
        <select class="select2" name="test2" id="test2_0">
          <option value="o_test">o_test2_1</option>
          <option value="o_test">o_test2_2</option>
          <option value="o_test">o_test2_3</option>
        </select>

        <button onclick="addRow()">clone</button>
      </form>
    </div>
  </div>
</div>

Javascript : Javascript:

function addRow() {
  var div = $('div[id^="row"]:last');
  var num = parseInt( div.prop("id").match(/\d+/g), 10 ) +1;
  var clone = div.clone().prop('id', 'row_'+num );

  div.after( clone );
}

$(".select2").select2();

Here is a fiddle containing my problem : https://jsfiddle.net/L5mn63g7/25/ 这是一个包含我的问题的小提琴: https : //jsfiddle.net/L5mn63g7/25/

So any idea what could the problem be? 那么,您知道问题可能是什么吗? To be able to clone select2 WITH it's options. 为了能够克隆select2及其选项。

Remove span tags before cloning and rebind select2 to the cloned dropdowns. 在克隆之前,请删除跨度标签,然后将select2重新绑定到克隆的下拉列表中。

Hope it will help you. 希望对您有帮助。

 function addRow() { var div = $('div[id^="row"]:last'); var num = parseInt( div.prop("id").match(/\\d+/g), 10 ) +1; var clone = div.clone().prop('id', 'row_'+num ); clone.find('[id]').each(function(){var $this = $(this); $this.prop('id', $this.prop('id').split('_')[0] + '_' + num);}); clone.find("span").remove(); clone.find(".select2").select2(); clone.find(".select2-container").css("width","300px") div.append( clone ); } $(".select2").select2(); 
 select { width: 300px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script> <div class="container"> <div class="row" id="row_0"> <div class="col-md-12"> <form id="form_0" onsubmit="return false;"> <select class="select2" name="test1" id="test1_0"> <option value="o_test">o_test1_1</option> <option value="o_test">o_test1_2</option> <option value="o_test">o_test1_3</option> </select> <select class="select2" name="test2" id="test2_0"> <option value="o_test">o_test2_1</option> <option value="o_test">o_test2_2</option> <option value="o_test">o_test2_3</option> </select> <button onclick="addRow()">clone</button> </form> </div> </div> </div> 

You have to destroy select2 first before cloning and change the name of selector for select2 to something other. 克隆之前必须先销毁select2,然后将select2的选择器名称更改为其他名称。 Here is working solution 这是工作解决方案

 function addRow() { $('.items').select2("destroy"); var div = $('div[id^="row"]:last'); var num = parseInt(div.prop("id").match(/\\d+/g), 10) + 1; var $clone = div.clone().prop('id', 'row_' + num); $clone.find('[id]').each(function() { var $this = $(this); $this.prop('id', $this.prop('id').split('_')[0] + '_' + num); }); div.after($clone); $('.items').select2(); } $(".items").select2(); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.js"></script> <div class="container"> <div class="row" id="row_0"> <div class="col-md-12"> <form id="form_0" onsubmit="return false;"> <select class="items" name="test1" id="test1_0"> <option value="o_test">o_test1_1</option> <option value="o_test">o_test1_2</option> <option value="o_test">o_test1_3</option> </select> <select class="items" name="test2" id="test2_0"> <option value="o_test">o_test2_1</option> <option value="o_test">o_test2_2</option> <option value="o_test">o_test2_3</option> </select> <button onclick="addRow()">clone</button> </form> </div> </div> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM