Я пытаюсь клонировать select2 с его параметрами, но, похоже, это не работает.
Я пытался уничтожить перед воссозданием, удалить промежуток перед воссозданием, но ничего не работает. Вот основной код.
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:
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();
Вот рабочий пример, содержащая мою проблему: https://jsfiddle.net/L5mn63g7/25/
Итак, есть идеи, в чем может быть проблема? Чтобы иметь возможность клонировать select2 С его параметрами.
@SvenHakvoort есть много тем, в которых говорится об этой проблеме, но каждая из них отличается, и на самом деле ни одна из них не предлагает решение моей проблемы, если вы думаете, что ссылка решает мою проблему, не стесняйтесь показать мне, как, как я не смог =) Но спасибо за ваш комментарий.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Удалите теги span перед клонированием и повторно привяжите select2 к клонированным раскрывающимся спискам.
Надеюсь, это поможет тебе.
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>Вы должны сначала уничтожить select2 перед клонированием и изменить имя селектора для select2 на другое. Вот рабочее решение
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>
Возможный дубликат Клонированный Select2 не отвечает