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

当前回答

我不知道是否有人经历过这种情况,但一旦代码命中触发器('change'),我的javascript就停止了,从未从触发器返回,其余的函数从未执行。

我对jquery触发器不够熟悉,不能说这是预期的。我通过将它包装在setTimeout中来解决它,这很难看,但很有效。

其他回答

在使用此$("#customers_select")清除该值之前。select2(“val”,“”); 尝试将焦点设置为重置单击的任何其他控件。

这将再次显示占位符。

Select2改变了API:

Select2: Select2 ("val")方法已弃用 并将在以后的Select2版本中删除。使用$element.val()代替。

现在最好的方法是:

$('#your_select_input').val('');

编辑:2016年12月意见表明,以下是更新的方式:

$('#your_select_input').val([]);

使用Select2管理lte 3。

经过多次尝试,这对我来说是有效的:

库位于顶部(如果与bootstrap冲突,则修改位置)

<link rel="stylesheet" href="/template/almasaeed2010/adminlte/plugins/select2/css/select2.min.css" >
<link rel="stylesheet" href="/template/almasaeed2010/adminlte/plugins/select2-bootstrap4-theme/select2-bootstrap4.min.css" >

JS脚本(在JQuery之后,在.select2(…脚本)

<script src="/template/almasaeed2010/adminlte/plugins/select2/js/select2.full.min.js"></script>

HTML

<select name="mode_de_reglement" id="mode_de_reglement" >
     <option value="cheque">cheque</option>
     <option value="virement">virement</option>
     <option value="carte_bancaire">carte bancaire</option>
</select>

初始化脚本:

$("#mode_de_reglement").select2({
     placeholder : "Mode de réglement"
});
$('#mode_de_reglement').val('');//setting starting value to empty because by default it selects the first value
$('#mode_de_reglement').trigger('change');//change to let the select2 library know you modified the value programmatically

最后,每当窗体重新打开时,我再次使用刷新选择:

//... onclick="openModalNewRecord()"
$('#mode_de_reglement').val('');
$('#mode_de_reglement').trigger('change');

这是我使用的模板AdminLte3

还要注意,您可以使用

$("#mode_de_reglement").select2({
     placeholder : "Mode de réglement" ,
     allowClear : true 
});

允许清除添加一个X按钮,以清除选择和显示占位符,但我不使用它,除非该字段在数据库中为空。

要重置表单,有些人会有一个重置按钮。 在脚本标记中添加以下代码

$('.your_btn_class').click(function(){
    $('#select_field_id').val([]);
    $("#select_field_id").select2({
    placeholder: "this is a placeholder",
    });
});

或者清空选择字段而不保留占位符:

$('.your_btn_class').click(function(){
    $('#select_field_id').val([]);
 });

我的解决方案是:

$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');
    });