我如何设置占位符的值重置由select2。在我的例子中,如果位置或等级选择框被单击,我的select2有一个值,那么select2的值应该重置并显示默认占位符。这个脚本正在重置值,但不会显示占位符

$("#locations, #grade ").change(function() {
   $('#e6').select2('data', {
     placeholder: "Studiengang wählen",
     id: null,
     text: ''
   });
});

$("#e6").select2({
   placeholder: "Studiengang wählen",
   width: 'resolve',
   id: function(e) {
     return e.subject;
   },
   minimumInputLength: 2,
   ajax: {
     url: "index.php?option=com_unis&task=search.locator&tmpl=component&<?php echo JSession::getFormToken() ?>=1",
     dataType: 'json',
     data: function(term, page) {
       return {
         q: term, // search term
         g: $('#grade option:selected').val(),
         o: $('#locations option:selected').val()
       };
     },
     results: function(data, page) {
       return {
         results: data
       };
     }
   },
   formatResult: subjectFormatResult,
   formatSelection: subjectFormatSelection,
   dropdownCssClass: "bigdrop",
   escapeMarkup: function(m) {
     return m;
   }
});

当前回答

我也有这个问题,它源于val(null).trigger("change");在占位符重置之前抛出No select2/compat/inputData错误。我通过捕捉错误并直接设置占位符(以及宽度)解决了这个问题。 注意:如果你有一个以上,你需要抓住每一个。

try{
    $("#sel_item_ID").select2().val(null).trigger("change");
}catch(err){
    console.debug(err)
}
try{
    $("#sel_location_ID").select2().val(null).trigger("change");
}catch(err){
    console.debug(err)
}
$('.select2-search__field')[0].placeholder='All Items';
$('.select2-search__field')[1].placeholder='All Locations';
$('.select2-search__field').width(173);

我正在运行Select2 4.0.3

其他回答

使用select2 3.2版本,这为我工作:

$('#select2').select2("data", "");

不需要实现initSelection

不管什么时候

$('myselectdropdown').select2('val', '').trigger('change');

在三到四次触发后,我开始有一些延迟。我想是内存泄漏了。它不在我的代码中,因为如果我删除这行,我的应用程序是无延迟的。

因为我有allowClear选项设置为true,我去

$('.select2-selection__clear').trigger('mousedown');

后面可以跟着$('myselectdropdown').select2('close');事件触发器在select2 dom元素上如果你想关闭打开建议下拉列表。

对于加载远程数据的用户,这将在不触发ajax的情况下将select2重置为占位符。适用于v4.0.3:

$("#lstProducts").val("").trigger("change.select2");

按照推荐的方法来做。在文档https://select2.github.io/options.html#my-first-option-is-being-displayed-instead-of-my-placeholder中找到(这似乎是一个相当常见的问题):

当这种情况发生时,通常意味着您在<select>中没有空白的<option></option>作为第一个选项。

如:

<select>
   <option></option>
   <option value="foo">your option 1</option>
   <option value="bar">your option 2</option>
   <option value="etc">...</option>
</select>

您可以通过

$('#object').empty();

但它不会让你回到你的占位符。

所以这是半解