我如何设置占位符的值重置由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;
   }
});

当前回答

如果你想在关闭一个模态时清除所有的select2输入,那么你可以添加一个类“select2”,并将它们都设置回它们的占位符,如下所示。

$('#myModal').on('hidden.bs.modal', function (e) {
    $(this)
        .find(".select2").select2({placeholder: "Choose an option"})
        .val('').trigger('change.select2');
});

这种一次性全部重置的方法也可以用于表单。 我使用的版本是4.0.10

其他回答

从v.4.0.x开始…

要清除值,还要恢复占位符使用…

.html('<option></option>');  // defaults to placeholder

如果它是空的,它将选择第一个选项项,而这可能不是你想要的

.html(''); // defaults to whatever item is first

坦率地说……Select2是如此令人讨厌,它竟然没有被替换,这让我感到惊讶。

好的,所以实际的解决方案(对于一个常见的情况,你有一个“选择项目”禁用和选择的第一项),是非常简单的,实际上:

$("select.select2").trigger("reset").trigger("change")

我的解决方案是:

$el.off('select2:unselect')
$el.on('select2:unselect', function (event) {
    var $option = $('<option value="" selected></option>');
    var $selected = $(event.target);

    $selected.find('option:selected')
             .remove()
             .end()
             .append($option)
             .trigger('change');
    });

DOM接口已经跟踪了初始状态…

所以做到以下几点就足够了:

$("#reset").on("click", function () {
    $('#my_select option').prop('selected', function() {
        return this.defaultSelected;
    });
});

在尝试了这里的前10个解决方案并失败后,我发现这个解决方案是有效的(参见“nilov评论于4月7日•编辑”):

(function ($) {
   $.fn.refreshDataSelect2 = function (data) {
       this.select2('data', data);

       // Update options
       var $select = $(this[0]);
       var options = data.map(function(item) {
           return '<option value="' + item.id + '">' + item.text + '</option>';
       });
       $select.html(options.join('')).change();
   };
})(jQuery);

然后进行更改:

var data = [{ id: 1, text: 'some value' }];
$('.js-some-field').refreshDataSelect2(data);

(作者最初显示var $select = $(this[1]);,评论者更正为var $select = $(this[0]);,这是我上面显示的。)