我正在尝试使用精彩的Select2库以编程方式清除下拉列表。使用Select2 query
选项,使用远程ajax调用动态填充下拉列表。
HTML:
<input id="remote" type="hidden" data-placeholder="Choose Something" />
使用Javascript:
var $remote = $('#remote');
$remote.select2({
allowClear: true,
minimumInputLength: 2,
query: function(options){
$.ajax({
dataType: 'json',
url: myURL + options.term,
error: function(jqXHR, textStatus, errorThrown){
smoke.alert(textStatus + ": server returned error on parsing arguments starting with " + options.term);
},
success: function(data, textStatus, jqXHR){
var results = [];
for(var i = 0; i < data.length; ++i){
results.push({id: data[i].id, text: data[i].name});
}
options.callback({results: results, more: false});
}
});
}
});
不幸的是,对$remove.select2('val', '')
的调用引发了以下异常:
Uncaught Error: cannot call val() if initSelection() is not defined
我尝试设置attr
,设置val
,text
和Select2特定data
功能。似乎无法使这个家伙清楚地工作在一个单选按钮的方式。有人有建议吗?
答案 0 :(得分:74)
这对我有用:
$remote.select2('data', {id: null, text: null})
当你清除它时,它也适用于jQuery验证。
- 编辑2013-04-09
在撰写此回复时,这是唯一的方法。通过最近的补丁,现在可以使用正确且更好的方法。
$remote.select2('data', null)
答案 1 :(得分:32)
这是正确的,select2将清除所选值并显示占位符。
$remote.select2('data', null)
答案 2 :(得分:16)
对于select2版本4,请轻松使用:
$('#remote').empty();
使用ajax调用填充select元素后,您可能需要在success部分中使用以下代码行来更新内容:
success: function(data, textStatus, jqXHR){
$('#remote').change();
}
答案 3 :(得分:15)
使用select2版本4,您可以使用以下简短表示法:
(i / (float) count) * 100)
这会在创建时将带有空id和文本的json数组传递给select2,但首先使用$('#remote').html('').select2({data: {id:null, text: null}});
清空先前存储的结果。
答案 4 :(得分:6)
你应该使用这个:
$('#remote').val(null).trigger("change");
答案 5 :(得分:5)
提出的方法@Lelio Faieta正在为我工作,但因为我使用bootstrap theme,它删除了select2的所有引导程序设置。所以我使用了以下代码:
$("#remote option").remove();
答案 6 :(得分:5)
我有点迟了,但这是在最后一个版本(4.0.3)中的工作:
$('#select_id').val('').trigger('change');
答案 7 :(得分:3)
这些都可以帮我清除下拉列表:
.select2('data', null)
.select2('val', null)
但重要提示:值不会被重置,.val()将返回第一个选项,即使它未被选中。我正在使用Select2 3.5.3
答案 8 :(得分:1)
我在其他问题中找到了答案(赞美 user780178 ):
Reset select2 value and show placeholdler
$("#customers_select").select2("val", "");
答案 9 :(得分:1)
从&gt; 4.0开始,为了真正清理select2,您需要执行以下操作:
$remote.select2.val('');
$remote.select2.html('');
selectedValues = []; // if you have some variable where you store the values
$remote.select2.trigger("change");
请注意,我们会根据初始问题选择select2。在您的情况下,您很可能会以不同的方式选择select2。
希望它有所帮助。
答案 10 :(得分:0)
由于它们都不适用于我(select2 4.0.3),所以选择了std。
for(var i = selectbox.options.length - 1 ; i >= 0 ; i--)
selectbox.remove(i);
答案 11 :(得分:0)
您可以使用此功能或进一步参考此https://select2.org/programmatic-control/add-select-clear-items
$('#mySelect2').val(null).trigger('change');
答案 12 :(得分:0)
这解决了我在3.5.2。版本中的问题。
$remote.empty().append(new Option()).trigger('change');
根据this issue,您需要在select标签内显示一个空白选项,以显示占位符。
答案 13 :(得分:0)
对于 Ajax,使用 $(".select2").val("").trigger("change")。这应该可以解决问题。
答案 14 :(得分:0)
如果需要,此代码会删除显示新列表的所有结果:
$('#select2Elem').data('select2').$results.children().remove()
比如在省市列表中,当省份发生变化,我们点击城市输入时,旧城市列表仍然显示,直到新列表加载完毕。
用我写的代码,可以在调用ajax之前删除旧列表
答案 15 :(得分:-1)
我就是这样做的:
$('#my_input').select2('destroy').val('').select2();