通过 onclick 事件加载后,select2 标记框不起作用
select2 tag box does not work once loaded through onclick event
在我的页面中有一个使用 select2 库的 select
框。我想要做的就是在单击按钮后添加更多 select 框。为此,我尝试了以下代码:
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/application.css"/>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.1/select2.min.js"></script>
</head>
<body>
<div id="location_form">
<div class="form-group" style="margin-bottom: 50px;">
<label for="cat" class="col-sm-1 col-sm-offset-1">Category <span class="asterisk">*</span></label>
<div class="col-sm-10">
<select class="form-control input-transparent select2" id="cat" name="category" required="required" multiple="multiple" size="1" data-parsley-trigger="change">
<option style="margin-bottom: 1px;">Select Categories</option>
<option value="1">Opt 1</option>
<option value="2">Opt 2</option>
<option value="3">Opt 3</option>
<option value="4">Opt 4</option>
</select>
</div>
</div>
</div>
<input type="button" id="addmore" value="Add More" />
<div class="locations"></div>
<script src="js/action-scripts.js"></script>
<script>
//----- tag loader --//
$(".select2").each(function(){
$(this).children().first().remove();
$(this).select2({
placeholder: "Select Categories",
maximumSelectionSize: 4
});
});
</script>
</body>
</html>
我的 action-script.js 如下所示:
// Add location 2
$('#addmore').click(function() {
index = Math.random();
var location_div = '<div class="location" id="location_' + index + '">';
location_div += $('#location_form').html();
location_div += '<hr class="col-sm-offset-1"></div>';
$('.locations').append(location_div);
});
所以,基本上我想做的是,一旦我的 HTML 页面中 ID 为 #addmore
的按钮被点击,我将把所有内容附加到 <div id="location_form">
div 到 <div class="locations">
。
这是可行的,但是,问题是我在新的 select-boxes 中丢失了 select2
库的所有功能。这是我的 jsfiddle link:
https://jsfiddle.net/0cars6oy/4/
如果您检查上面的 jsfiddle link,您将看到单击 Add More
按钮后出现的 select 框不起作用。不管你在那里输入什么,它都不会从列表中推荐任何东西。
我对 javascript 的了解非常有限。我很难弄清楚如何解决这个问题。非常感谢任何帮助。
干杯
你主要需要做两件事:
1) 从当前 select 中删除 id,因为您是直接复制 html。
2) 在添加 html
之后,在按钮单击事件处理程序中调用它
$(".select2").each(function(){
$(this).children().first().remove();
$(this).select2({
placeholder: "Select Categories",
maximumSelectionSize: 4
});
});
试试这个...我无法添加内联 jsfiddle,因为你的样式非常大 jsfiddle
var index = 1;
$('#addmore').click(function() {
var _html = $('#location_form').clone(false);
_html.find(".select2").prev('.select2-container').remove();
var _id = 'location_' + index;
$('<div/>', {
class: 'location',
id: _id,
html: _html.html() + '<hr class="col-sm-offset-1"></div>',
}).appendTo('.locations').find('select.select2').select2({
placeholder: "Select Categories",
maximumSelectionSize: 4
});
index++;
});
$(".select2").children().first().remove();
$(".select2").select2({
placeholder: "Select Categories",
maximumSelectionSize: 4
});
在我的页面中有一个使用 select2 库的 select
框。我想要做的就是在单击按钮后添加更多 select 框。为此,我尝试了以下代码:
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/application.css"/>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.1/select2.min.js"></script>
</head>
<body>
<div id="location_form">
<div class="form-group" style="margin-bottom: 50px;">
<label for="cat" class="col-sm-1 col-sm-offset-1">Category <span class="asterisk">*</span></label>
<div class="col-sm-10">
<select class="form-control input-transparent select2" id="cat" name="category" required="required" multiple="multiple" size="1" data-parsley-trigger="change">
<option style="margin-bottom: 1px;">Select Categories</option>
<option value="1">Opt 1</option>
<option value="2">Opt 2</option>
<option value="3">Opt 3</option>
<option value="4">Opt 4</option>
</select>
</div>
</div>
</div>
<input type="button" id="addmore" value="Add More" />
<div class="locations"></div>
<script src="js/action-scripts.js"></script>
<script>
//----- tag loader --//
$(".select2").each(function(){
$(this).children().first().remove();
$(this).select2({
placeholder: "Select Categories",
maximumSelectionSize: 4
});
});
</script>
</body>
</html>
我的 action-script.js 如下所示:
// Add location 2
$('#addmore').click(function() {
index = Math.random();
var location_div = '<div class="location" id="location_' + index + '">';
location_div += $('#location_form').html();
location_div += '<hr class="col-sm-offset-1"></div>';
$('.locations').append(location_div);
});
所以,基本上我想做的是,一旦我的 HTML 页面中 ID 为 #addmore
的按钮被点击,我将把所有内容附加到 <div id="location_form">
div 到 <div class="locations">
。
这是可行的,但是,问题是我在新的 select-boxes 中丢失了 select2
库的所有功能。这是我的 jsfiddle link:
https://jsfiddle.net/0cars6oy/4/
如果您检查上面的 jsfiddle link,您将看到单击 Add More
按钮后出现的 select 框不起作用。不管你在那里输入什么,它都不会从列表中推荐任何东西。
我对 javascript 的了解非常有限。我很难弄清楚如何解决这个问题。非常感谢任何帮助。
干杯
你主要需要做两件事:
1) 从当前 select 中删除 id,因为您是直接复制 html。 2) 在添加 html
之后,在按钮单击事件处理程序中调用它$(".select2").each(function(){
$(this).children().first().remove();
$(this).select2({
placeholder: "Select Categories",
maximumSelectionSize: 4
});
});
试试这个...我无法添加内联 jsfiddle,因为你的样式非常大 jsfiddle
var index = 1;
$('#addmore').click(function() {
var _html = $('#location_form').clone(false);
_html.find(".select2").prev('.select2-container').remove();
var _id = 'location_' + index;
$('<div/>', {
class: 'location',
id: _id,
html: _html.html() + '<hr class="col-sm-offset-1"></div>',
}).appendTo('.locations').find('select.select2').select2({
placeholder: "Select Categories",
maximumSelectionSize: 4
});
index++;
});
$(".select2").children().first().remove();
$(".select2").select2({
placeholder: "Select Categories",
maximumSelectionSize: 4
});