我的表单中有select2多选字段,我想在选中后从下拉列表中删除所选选项,如果从列表中删除它,则再次将其添加到列表中。此外,添加的项目应与选择的顺序相同。当前的select2(4.0)不会删除所选项目,而是按照它们在下拉列表中显示的顺序显示所选项目,而不是按照它们被选中的顺序显示。
$(document).ready(function(){
$('#dynamicAttributes').select2({
allowClear: true,
minimumResultsForSearch: -1,
width: 600
});
});
JSFiddle:https://jsfiddle.net/rd62bhbm/
答案 0 :(得分:48)
问答的第1部分:
您可以执行 CSS技巧隐藏selected item
,如下所示:
.select2-results__option[aria-selected=true] {
display: none;
}
问题的第2部分:
此外,您可以执行 JQuery技巧以强制selected items
结束标记框(通过选择选择项目,将其分离(删除),然后重新启动)它到标签框,然后调用“更改功能”以应用更改):
$("select").on("select2:select", function (evt) {
var element = evt.params.data.element;
var $element = $(element);
$element.detach();
$(this).append($element);
$(this).trigger("change");
});
最后更新了JsFiddle,我希望它适合你,谢谢!
编辑#1
您可以Clear All Selected
通过此次调用(应用空值):
$("#dynamicAttributes").val(null).trigger("change");
on Button:
$('#btnReset').click(function() {
$("#dynamicAttributes").val(null).trigger("change");
});
<强> Updated Fiddle #2 强>
答案 1 :(得分:1)
我找到了一种方法,使选定的值不再出现在选择弹出列表
中在文档中,您可以获得事件列表Select2 events
打开强>
我利用这些select2事件打开隐藏所选值
这是javascript ::
$(document).ready(function() {
$('#dynamicAttributes').select2({
allowClear: true,
minimumResultsForSearch: -1,
width: 600
});
// override the select2 open event
$('#dynamicAttributes').on('select2:open', function () {
// get values of selected option
var values = $(this).val();
// get the pop up selection
var pop_up_selection = $('.select2-results__options');
if (values != null ) {
// hide the selected values
pop_up_selection.find("li[aria-selected=true]").hide();
} else {
// show all the selection values
pop_up_selection.find("li[aria-selected=true]").show();
}
});
});
这是DEMO
希望它有所帮助。
答案 2 :(得分:1)
我的解决方案修改了#3158行中的select2.js(核心版本4.0.3)。添加以下验证:
if ($option[0].selected == true) {
return;
}
通过此验证,我们可以从下拉列表中排除所选的验证。如果您写下所选选项的名称,则显示选项“noResult”的文本。
这里有完整的代码:
SelectAdapter.prototype.query = function (params, callback) {
var data = [];
var self = this;
var $options = this.$element.children();
$options.each(function () {
var $option = $(this);
if (!$option.is('option') && !$option.is('optgroup') ) {
return;
}
if ($option[0].selected == true) {
return;
}
var option = self.item($option);
var matches = self.matches(params, option);
if (matches !== null) {
data.push(matches);
}
});
callback({
results: data
});
};
答案 3 :(得分:0)
$(document).ready(function(){
$('#dynamicAttributes').select2({
allowClear: true,
minimumResultsForSearch: -1,
width: 600
});
});
这会在单击“删除符号”按钮时出现错误
TypeError:this.placeholder未定义
使用
$(document).ready(function(){
$('#dynamicAttributes').select2({
allowClear: true,
minimumResultsForSearch: -1,
width: 600,
placeholder: 'past your placeholder'
});
});
答案 4 :(得分:0)
另一种隐藏选定值的方法是,在将值标记为选定时,对return null
使用dropdown templateResult选项。
function hideSelected(value) {
if (value && !value.selected) {
return $('<span>' + value.text + '</span>');
}
}
$(document).ready(function() {
$('#dynamicAttributes').select2({
allowClear: true,
placeholder: {
id: "",
placeholder: "Leave blank to ..."
},
minimumResultsForSearch: -1,
width: 600,
templateResult: hideSelected,
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.2/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.2/js/select2.min.js"></script>
<select id="dynamicAttributes" multiple="true" data-tags="true">
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
答案 5 :(得分:0)
从select2个所选项目中删除(取消选择)项目
第一步:将“多个” css类添加到select2元素中以获得所需的真实元素
<select class="multiple">
....
</select>
$('select.multiple').on('select2:selecting', function (e) {
var select = this;
var idToRemove = '0';
var selections = $(select).select2('data');
var Values = new Array();
for (var i = 0; i < selections.length; i++) {
if (idToRemove !== selections[i].id) {
Values.push(selections[i].id);
}
}
$(select).val(Values).trigger('change');
});
答案 6 :(得分:0)
如果您有更改触发器或取消选择单击 使用这个:
URL
其他
$("#dynamicAttributes").val(null).trigger("change");
如果你想完全清空列表 使用
$("#dynamicAttributes").val('')
快乐编码
答案 7 :(得分:-5)
$("#cqte").select2("val", "");
//cqte is id of dropdown