重置select2值并显示占位符

时间:2013-07-30 20:46:23

标签: jquery twitter-bootstrap jquery-select2

如何通过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;
   }
});

38 个答案:

答案 0 :(得分:212)

您必须将select2定义为

$("#customers_select").select2({
    placeholder: "Select a customer",
    initSelection: function(element, callback) {                   
    }
});

重置select2

$("#customers_select").select2("val", "");

答案 1 :(得分:110)

Select2已更改其API:

  

Select2:不推荐使用select2("val")方法   并将在以后的Select2版本中删除。改为使用$ element.val()。

现在最好的方法是:

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

编辑:2016年12月评论建议以下是更新后的方法:

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

答案 2 :(得分:88)

接受的答案在我的案例中不起作用。我正在尝试这个,它正在发挥作用:

定义select2:

$("#customers_select").select2({
    placeholder: "Select a State",
    allowClear: true
});

$("#customers_select").select2({
    placeholder: "Select a State"
});

要重置:

$("#customers_select").val('').trigger('change')

$("#customers_select").empty().trigger('change')

答案 3 :(得分:36)

对我来说唯一可行的是:

$('select2element').val(null).trigger("change")

我正在使用版本4.0.3

<强>参考

According to Select2 Documentation

答案 4 :(得分:15)

Select2使用特定的CSS类,因此重置它的简便方法是:

$('.select2-container').select2('val', '');

如果您在同一表单中有多个Select2,那么您的优势在于,所有这些都将使用此单个命令重置。

答案 5 :(得分:14)

使用此:

$('.select').val([]).trigger('change');

答案 6 :(得分:10)

删除所选值

$('#employee_id').select2('val','');

清除期权价值

$('#employee_id').html('');

答案 7 :(得分:9)

对于Select2版本4.0.9,这对我有效:

$( "#myselect2" ).val('').trigger('change');

答案 8 :(得分:7)

我知道这是一个老问题,但这适用于select2版本4.0

 $('#select2-element').val('').trigger('change');

$('#select2-element').val('').trigger('change.select2'); 

如果您有绑定的更改事件

答案 9 :(得分:5)

首先,你必须像这样定义select2:

$('#id').select2({
    placeholder: "Select groups...",
    allowClear: true,
    width: '100%',
})

要重置select2,只需使用以下代码块:

$("#id > option").removeAttr("selected");
$("#id").trigger("change");

答案 10 :(得分:4)

您可以通过

清除选择
$('#object').empty();

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

所以这是一半的解决方案

答案 11 :(得分:4)

因此,要重置表格,一些人将具有一个重置按钮。 在脚本标记内添加以下代码

$('.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([]);
 });

答案 12 :(得分:4)

这是正确的方法:

 $("#customers_select").val('').trigger('change');

我使用的是Select2的最新版本。

答案 13 :(得分:4)

使用以下命令配置select2

    $('#selectelementid').select2({
        placeholder: "Please select an agent",
        allowClear: true // This is for clear get the clear button if wanted 
    });

并以编程方式清除选择输入

    $("#selectelementid").val("").trigger("change");
    $("#selectelementid").trigger("change");

答案 14 :(得分:3)

我尝试了上述解决方案,但它对我不起作用。

这是一种破解,你不必触发改变。

$(function () {
    $(".assign").button().on("click", function () {
        $('#passedId').val(this.id);
        createDialog();
        dialog.dialog("open");
    });
});
function createDialog() {
    var dialog = $("#dialog-form").dialog({
        autoOpen: true,
        height: 310,
        width: 350,
        modal: true
    });
}

$("select").select2('destroy').val("").select2();

答案 15 :(得分:3)

对于加载远程数据的用户,this会将select2重置为占位符而不会触发ajax。适用于v4.0.3:

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

答案 16 :(得分:2)

按照推荐方式执行此操作。在文档https://select2.github.io/options.html#my-first-option-is-being-displayed-instead-of-my-placeholder中找到(这似乎是一个相当普遍的问题):

如果发生这种情况,通常意味着您<option></option>中的第一个选项没有空白<select>

如:

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

答案 17 :(得分:2)

我也遇到了这个问题,它源于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

答案 18 :(得分:1)

使用select2版本3.2这对我有用:

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

不需要实施initSelection

答案 19 :(得分:1)

我已尝试过以上解决方案,但没有使用版本4x。

我想要实现的是:清除所有选项但不要触摸占位符。这段代码适合我。

selector.find('option:not(:first)').remove().trigger('change');

答案 20 :(得分:1)

$("#customers_select").val([]).trigger('change')

这将删除值,这对我来说最重要-它还删除了 空的x按钮

答案 21 :(得分:1)

从select2网站

$("#mySelect2ControlId").val(null).trigger("change");

答案 22 :(得分:1)

对于占位符

$("#stateID").select2({
    placeholder: "Select a State"
});

重置选择2

$('#stateID').val('');
$('#stateID').trigger('change');

希望这有帮助

答案 23 :(得分:1)

v.4.0.x ...

清除值,但恢复占位符使用...

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

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

.html(''); // defaults to whatever item is first
坦率地说...... Select2在屁股上是如此痛苦,令我惊讶的是它还没有被替换。

答案 24 :(得分:0)

在您的js文件中使用此代码

$('#id').val('1');
$('#id').trigger('change');

答案 25 :(得分:0)

我已阅读所有答案,其中许多答案已被弃用。

这是您目前可以清除和设置占位符值的方式:

// Clear and put a blank select placeholder
$("#MySelect").prop('disabled', false).find("option:gt(0)").remove();

答案 26 :(得分:0)

<label for="RECEIVED_BY" class="control-label"> Received into store By </label>
<label class="pull-right">
  <button
    type="button"
    title="Clear Received into store By"
    class="receive_clear clear-button"
    aria-label="Select2 options"
  >
    x
  </button></label
>
<select type="text" class="clear_receive_info_by">
  <option value="">--Select--</option>
  <option value="value1">value1</option>
  <option value="value2">value2</option>
  <option value="value3">value3</option>
</select>

jQuery:

var $clear_receive_info_by = $(".clear_receive_info_by").select2();
$(".receive_clear").on("click", function () {
    $clear_receive_info_by.val(null).trigger("change");
});

答案 27 :(得分:0)

此解决方案对我有用(Select2 4.0.13)

$('#select').on("select2:unselecting", function (e) {
   $(this).val('').trigger('change');
   e.preventDefault();
});

答案 28 :(得分:0)

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

这将再次显示占位符。

答案 29 :(得分:0)

在这种情况下,我这样做:

  $('#select').val('');
  $('.select2.select2-container').remove();
  $('.select2').select2();
  1. 我将选择值更改为空
  2. 我移除了select2的容器
  3. 重新调用select2

答案 30 :(得分:0)

我不知道是否有人遇到过这种情况,但是一旦代码击中了Trigger('change'),我的JavaScript便停止了运行,从未从触发器返回,而其余函数则从未执行。

我对jquery触发器还不够熟悉,无法在预期中做到这一点。我通过将它包装在setTimeout中来解决它,这很丑但是很有效。

答案 31 :(得分:0)

One [very] hacky way to do it (I saw it work for version 4.0.3):

var selection = $("#DelegateId").data("select2").selection;
var evt = document.createEvent("UIEvents");
selection._handleClear(evt);
selection.trigger("toggle", {});
  • allowClear must be set to true
  • an empty option must exist in the select element

答案 32 :(得分:0)

$('myselectdropdown').select2('val', '0')

其中0是下拉列表的第一个值

答案 33 :(得分:0)

每当我做的时候

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

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

由于我将allowClear选项设置为true,因此我选择了

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

这之后可以是$('myselectdropdown')。select2('close'); select2 dom元素上的事件触发器,以防你想要关闭打开的建议下拉列表。

答案 34 :(得分:0)

我的解决方案是:

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

答案 35 :(得分:0)

在这里尝试了前10个解决方案并失败之后,我发现this解决方案正常工作(参见“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]);,我在上面展示了这一点。)

答案 36 :(得分:0)

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

所以做以下就足够了:

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

答案 37 :(得分:-1)

为了重置值和占位符,我只需重新启动select2元素:

x:Class="Test.Main.App"