重置select2值并显示占位符

fef*_*efe 197 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;
   }
});
Run Code Online (Sandbox Code Playgroud)

Abd*_*lek 224

您必须将select2定义为

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

要重置select2

$("#customers_select").select2("val", "");
Run Code Online (Sandbox Code Playgroud)

  • `$("#customers_select").val('').触发器('更改');`我使用它并且它有效. (22认同)
  • 这对我不起作用.占位符仍未显示. (14认同)
  • 从v4.0.3开始,它似乎不再是`.select2("val","")`了. (12认同)
  • 我用<select multiple>尝试了这个,但是我得到了错误:当连接到<select>元素时,Select2不允许选项'initSelection'. (6认同)
  • 请参阅下面的@Lego Stormtroopr的答案,它反映了根据Select2 API的新方法.不推荐使用上述方法. (5认同)
  • $( "#SELECTID")空()选择2(). (3认同)
  • $("#customers_select").select2("val",""); 为我工作:D (2认同)

小智 119

Select2更改了他们的API:

Select2:该select2("val")方法已被弃用,将在以后的Select2版本中删除.请改用$ element.val().

现在最好的方法是:

$('#your_select_input').val('');
Run Code Online (Sandbox Code Playgroud)

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

$('#your_select_input').val([]);
Run Code Online (Sandbox Code Playgroud)

  • 这会更新值,但要正确显示,您必须触发更改事件.`$( '#your_select_input').VAL( '').触发器( '变化')` (127认同)
  • 使用select2 4.0.2时,这无法正常工作.它将重置选择并恢复占位符,但是当我选择一个新值(重置后)时,我也看到选中了一个"空字符串"选项(即,其中只有一个"x"的框). (6认同)
  • 这对我不起作用.占位符仍未显示. (3认同)
  • 这对我来说更有"更改"触发器的作用,但也会触发我们正在使用的验证库 - 现在我将不得不使用已弃用的版本. (3认同)

Nor*_*Cat 100

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

定义select2:

$("#customers_select").select2({
    placeholder: "Select a State",
    allowClear: true
});
Run Code Online (Sandbox Code Playgroud)

要么

$("#customers_select").select2({
    placeholder: "Select a State"
});
Run Code Online (Sandbox Code Playgroud)

重置:

$("#customers_select").val('').trigger('change')
Run Code Online (Sandbox Code Playgroud)

要么

$("#customers_select").empty().trigger('change')
Run Code Online (Sandbox Code Playgroud)

  • $("#customers_select").empty().trigger('change')适合我.:) (8认同)
  • 我发现除非你定义了占位符,否则allowClear不起作用 (2认同)
  • 这对我有用,它会从我使用的 select2 中删除所有数据 v4.0.3 (2认同)
  • '$("#customers_select").empty().trigger('change')' 为我工作,谢谢! (2认同)

M.T*_*Tae 47

对我来说唯一可行的是:

$('select2element').val(null).trigger("change")
Run Code Online (Sandbox Code Playgroud)

我正在使用4.0.3版

参考

根据Select2文档

  • 我也使用v4.0.3和`$('select2element').val("").trigger("change")`工作正常. (2认同)
  • 根据select2 docs,这是最正确的方法。 (2认同)

Mar*_*ato 16

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

$('.select2-container').select2('val', '');
Run Code Online (Sandbox Code Playgroud)

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


小智 15

用这个 :

$('.select').val([]).trigger('change');
Run Code Online (Sandbox Code Playgroud)


Sha*_*SMS 10

删除所选值

$('#employee_id').select2('val','');
Run Code Online (Sandbox Code Playgroud)

清除期权价值

$('#employee_id').html('');
Run Code Online (Sandbox Code Playgroud)

  • 是的,这就是我突出答案标题的原因. (2认同)
  • 第一个答案确实不再适用于&gt; 4.0。但是第二个选项救了我!当您想要真正清除 select2 时,这是解决方案。仅将 .val('') 设置为选择 2 是不够的。您还需要清除 html。非常感谢!!! (2认同)

小智 8

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

 $('#select2-element').val('').trigger('change');
Run Code Online (Sandbox Code Playgroud)

要么

$('#select2-element').val('').trigger('change.select2'); 
Run Code Online (Sandbox Code Playgroud)

如果你有绑定它的变化事件


Ill*_*u36 8

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

$( "#myselect2" ).val('').trigger('change');
Run Code Online (Sandbox Code Playgroud)


tec*_*boy 7

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

这是一种黑客,您不必触发更改。

$("select").select2('destroy').val("").select2();
Run Code Online (Sandbox Code Playgroud)

或者

$("select").each(function () { //added a each loop here
        $(this).select2('destroy').val("").select2();
});
Run Code Online (Sandbox Code Playgroud)


小智 7

使用以下内容配置select2

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

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

    $("#selectelementid").val("").trigger("change");
    $("#selectelementid").trigger("change");
Run Code Online (Sandbox Code Playgroud)


Tre*_*eeZ 7

这是正确的方法:

 $("#customers_select").val('').trigger('change');
Run Code Online (Sandbox Code Playgroud)

我正在使用最新版本的Select2。


小智 6

您可以通过以下方式清除 te 选择

$('#object').empty();
Run Code Online (Sandbox Code Playgroud)

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

所以它的一半解决方案


Mah*_*dın 6

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

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

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

$("#id > option").removeAttr("selected");
$("#id").trigger("change");
Run Code Online (Sandbox Code Playgroud)


Cha*_*ehn 5

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

$("#lstProducts").val("").trigger("change.select2");
Run Code Online (Sandbox Code Playgroud)


Ali*_*ane 5

因此,要重置表单,有些人将有一个重置按钮。在 script 标签内添加以下代码

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

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

$('.your_btn_class').click(function(){
    $('#select_field_id').val([]);
 });
Run Code Online (Sandbox Code Playgroud)