select2の値をリセットしてプレースホルダーを表示


212

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

回答:


238

select2を次のように定義する必要があります

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

select2をリセットするには

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

7
<select multiple>を使用してこれを試しましたが、エラーが発生します。オプション 'initSelection'は、<select>要素にアタッチされているSelect2では許可されていません。
Sorin Postelnicu 2014

14
これは私にはうまくいきません。プレースホルダーはまだ表示されません。
bcr

5
以下の@Lego Stormtrooprの回答を参照してください。これは、Select2のAPIに基づく新しいメソッドを反映しています。上記のメソッドは非推奨です。
David

14
v4.0.3以降、動作しないようです.select2("val", "")
adamj

30
$("#customers_select").val('').trigger('change') ;私はこれを使用し、うまくいきました。
Akshay Kulkarni

125

Select2はAPIを変更しました:

Select2:このselect2("val")メソッドは廃止されており、後のSelect2バージョンでは削除されます。代わりに$ element.val()を使用してください。

これを行う最善の方法は次のとおりです。

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

編集:2016年12月コメントは、これがこれを行うための更新された方法であることを示唆しています:

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

135
これにより値が更新されますが、正しく表示されるようにするには、変更イベントをトリガーする必要があります。$('#your_select_input').val('').trigger('change')
サニーム2015年

5
これは私にはうまくいきません。プレースホルダーはまだ表示されません。
bcr

3
これはchangeトリガーの追加で機能しますが、使用している検証ライブラリーもトリガーします。今のところ、非推奨のバージョンを使用する必要があります。
Dave Newton

6
これは、select2 4.0.2を使用して正しく機能しません。選択をリセットしてプレースホルダーを復元しますが、新しい値を選択すると(リセット後)、「空の文字列」オプション(つまり、「x」のみが含まれるボックス)が選択されているのがわかります。
kounoupis 2016年

1
$( '#your_select_input')。val( '')。trigger( 'change')は、プレースホルダーが指定されている場合にのみ機能します。そうでなければ、空の文字列オプションが選択されたオプションとして表示されます。
amol

115

受け入れられた答えは私の場合うまくいきません。私はこれを試していて、うまくいきます:

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')

2
私はあなたが、プレースホルダが定義されていない限りallowClearが動作しないことが判明
ダンTappin

どちら$('#your_select_input').val('').trigger('change')$('#your_select_input').val('');Firefoxで動作しません
アレックスアート。

1
これは私にとってはうまくいき、v4.0.3を使用しているselect2からすべてのデータを削除します
ClearBoth

8
$( "#customers_select")。empty()。trigger( 'change')がうまくいきます。:)
ムンナカーン

1
'$( "#customers_select")。empty()。trigger(' change ')'がうまくいきました、ありがとう!
Tahirhan

52

私のために働くことができる唯一のものは:

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

バージョン4.0.3を使用しています

参照

Select2ドキュメントによると


2
私もv4.0.3を使用しており、正常に$('select2element').val("").trigger("change")動作しています。
Roubi

<select>内に空の<option>も必要であることに注意してください。select2でajaxを使用している場合、これが役立ちます-$( '#selectFieldId')。prepend( '<option selected = "selected"> </ option>')
musicjerm

19

Select2バージョン4.0.9では、これは私にとってはうまくいきます:

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

1
これにより、select2ドロップダウンが空白になりました。私のために働いた。ありがとう。
食器

18

Select2は特定のCSSクラスを使用するので、それをリセットする簡単な方法は次のとおりです。

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

また、同じフォームに複数のSelect2がある場合、これらすべてがこの単一のコマンドでリセットされるという利点があります。



11

選択した値を削除するには

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

オプション値をクリアするには

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

1
fefeは、プレースホルダーテキストの再設定を求めています。したがって、この回答の最初の部分のみが有効です。
nterms 2015

2
はい、そのため、回答のタイトルを強調表示しています。
Shanka SMS

2
最初の答えは確かに> 4.0以降では適用されません。しかし、2番目のオプションは私を救いました!これは、select2を本当にクリアしたい場合の解決策です。.val( '')を選択して2を選択するだけでは十分ではありません。また、htmlをクリアする必要があります。どうもありがとう!!!
wazza

8

これは古い質問の一種であることは知っていますが、select2バージョン4.0で機能します

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

または

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

バインドされている変更イベントがある場合


優れたソリューション。新しく追加されたselect2ボックスをターゲットにするには、.last()関数を追加する必要がありました。$('#select2-element').last().val('').trigger('change.select2');
InsParbo 2017年

8

以下を使用して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");

7

これは正しい方法です:

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

Select2の最新リリースを使用しています。


6

まず、次のようにselect2を定義する必要があります。

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

select2をリセットするには、次のコードブロックを使用するだけです。

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

6

あなたはによって選択をクリアすることができます

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

ただし、プレースホルダーに戻ることはありません。

したがって、その半分のソリューション


5

上記の解決策を試しましたが、うまくいきませんでした。

これは一種のハックであり、変更をトリガーする必要はありません。

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

または

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

5

リモートデータを読み込むユーザーの場合、これにより、ajaxを起動せずにselect2をプレースホルダーにリセットします。v4.0.3で動作します:

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

私のために働いたが、私のトリガーはちょうど「変更」だった
グレゴリーR.サダース

これは、Ajaxデータを使用して別のSelect2からSelect2をリセットするために機能した唯一のソリューションでした。
IlludiumPu36

5

したがって、フォームをリセットするために、一部のユーザーにはリセットボタンがあります。スクリプトタグ内に次のコードを追加します

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

3

プレースホルダーの場合

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

選択2をリセットするには

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

お役に立てれば


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>

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を実行しています


changeイベントにバインドされたリスナーがあるようです。トリガーしてみてくださいchange.select2-バインドされたリスナーはトリガーされません(github.com/select2/select2/issues/3620を参照)。
ポール

2

v.4.0.x以降...

値をクリアするだけでなく、プレースホルダーの使用復元します...

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

空の場合、代わりに最初のオプション項目が選択されますが、これは必要なものではない可能性があります

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

率直に言って... Select2はお尻の痛みです、それが交換されていないことに驚いています。


1

上記の解決策を試しましたが、バージョン4xでは機能しませんでした。

私が達成したいのは、すべてのオプションをクリアしますが、プレースホルダーには触れないことです。このコードは私にとってはうまくいきます。

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

selector.find( 'option:not(:first)')。html( '');を使用する場合 うまくいくはずです。
wazza

1

select2バージョン3.2を使用してこれは私のために働きました:

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

実装する必要はなかった initSelection


1
これは、私がこれを実行する最も簡単な方法でした。他の方法ではうまくいきませんでした。
chevybow

1

ここで最初の10の解決策を試して失敗した後、私はこの解決策が機能することを発見しました(「4月7日にコメントされたnilov、編集済み」のページのコメントを参照):

(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]);です。


1

このコードをjsファイルに使用してください

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

0

これを使用して値をクリアする前に$("#customers_select").select2("val", ""); 、リセットクリックで他のコントロールにフォーカスを設定してください。

これにより、プレースホルダーが再び表示されます。


0

DOMインターフェースはすでに初期状態を追跡しています...

したがって、次のことで十分です。

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

0

まあ私がしたときはいつでも

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

3〜4回のトリガーの後、私はある種の遅れを取り始めました。メモリリークがあると思います。この行を削除すると、アプリにラグがなくなるため、コード内にはありません。

allowClearオプションをtrueに設定しているので、

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

この後に$( 'myselectdropdown')。select2( 'close');を続けることができます。開いている提案ドロップダウンを閉じたい場合のselect2 dom要素のイベントトリガー。


0

それを行う[非常に]ハックな方法の1つ(私はそれがバージョン4.0.3で機能するのを見ました):

var selection = $("#DelegateId").data("select2").selection;
var evt = document.createEvent("UIEvents");
selection._handleClear(evt);
selection.trigger("toggle", {});
  • allowClearはtrueに設定する必要があります
  • 空のオプションがselect要素に存在する必要があります

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.