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を次のように定義しなければなりません。
$("#customers_select").select2({
placeholder: "Select a customer",
initSelection: function(element, callback) {
}
});
Select2をリセットする
$("#customers_select").select2("val", "");
Select2がAPIを変更しました。
Select2:
select2("val")
メソッドは推奨されなくなり、それ以降のバージョンのSelect2では削除される予定です。代わりに$ element.val()を使用してください。
今これをする最もよい方法は:
$('#your_select_input').val('');
編集:2016年12月 コメントは、以下がこれを行う最新の方法であることを示唆している。
$('#your_select_input').val([]);
私の場合、受け入れられた答えは機能しません。私はこれを試しています、そしてそれは働いています:
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')
私のために働くことができる唯一のものは以下のとおりです。
$('select2element').val(null).trigger("change")
バージョン4.0.3を使用しています
参照
Select2は特定のCSSクラスを使用するので、リセットする簡単な方法は次のとおりです。
$('.select2-container').select2('val', '');
また、同じフォームに複数のSelect2がある場合、それらすべてがこの単一のコマンドでリセットされるという利点があります。
これを使って :
$('.select').val([]).trigger('change');
選択した値を削除する
$('#employee_id').select2('val','');
オプション値をクリアするには
$('#employee_id').html('');
私はこれが一種の古い質問であることを知っています、しかしこれはselect2バージョン4.0のために働きます
$('#select2-element').val('').trigger('change');
または
$('#select2-element').val('').trigger('change.select2');
変更イベントがバインドされている場合
まず、あなたはこのようにselect2を定義しなければなりません:
$('#id').select2({
placeholder: "Select groups...",
allowClear: true,
width: '100%',
})
Select2をリセットするには、単純に次のコードブロックを使用します。
$("#id > option").removeAttr("selected");
$("#id").trigger("change");
以下を使用して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");
これは正しい方法です。
$("#customers_select").val('').trigger('change');
最新リリースのSelect2を使用しています。
選択を解除するには
$('#object').empty();
しかし、それはあなたをあなたのプレースホルダーに戻すことはしません。
だからその半分の解決策
リモートデータをロードしているユーザーの場合、 this はajaxを起動せずにselect2をプレースホルダーにリセットします。 v4.0.3で動作します:
$("#lstProducts").val("").trigger("change.select2");
私は上記の解決策を試しましたが、それは私のために働きませんでした。
これは一種のハックであり、あなたは変化を引き起こす必要はありません。
$("select").select2('destroy').val("").select2();
または
$("select").each(function () { //added a each loop here
$(this).select2('destroy').val("").select2();
});
recommended のやり方に従って。ドキュメントにあります 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>
私もこの問題を抱えていました、そしてそれはプレースホルダーがリセットされる前に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を実行しています
v.4.0.x以降...
値をクリアしますが、 も /プレースホルダーの使用を元に戻す...
.html('<option></option>'); // defaults to placeholder
空の場合は、最初のオプション項目が代わりに選択されます。
.html(''); // defaults to whatever item is first
率直に言って... Select2はお尻のそのような痛みです、それはそれが交換されていない私を驚かせます。
プレースホルダー用
$("#stateID").select2({
placeholder: "Select a State"
});
選択をリセットする2
$('#stateID').val('');
$('#stateID').trigger('change');
お役に立てれば
Select2バージョン3.2を使って、これは私のために働きました:
$('#select2').select2("data", "");
initSelection
を実装する必要はありませんでした
そのため、フォームをリセットするために、一部のユーザーにはリセットボタンがあります。スクリプトタグ内に次のコードを追加します
$('.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([]);
});
私は上記の解決策を試しましたが、どれもバージョン4xで動きませんでした。
私が達成したいのは、次のとおりです。すべてのオプションをオフにしますが、プレースホルダーには触れないでください。このコードは私には役に立ちます。
selector.find('option:not(:first)').remove().trigger('change');
ここで最初の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]);
に修正されました。)
このコードをjsファイルに使用してください。
$('#id').val('1');
$('#id').trigger('change');
DOMインターフェースは、すでに初期状態を追跡しています...
したがって、次の手順を実行するだけで十分です。
$("#reset").on("click", function () {
$('#my_select option').prop('selected', function() {
return this.defaultSelected;
});
});
私の解決策は:
$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');
});
$('myselectdropdown').select2('val', '0')
0はドロップダウンの最初の値です。
私はいつでも
$('myselectdropdown').select2('val', '').trigger('change');
3〜4回トリガーした後、ある種の遅れが出始めました。メモリリークがあると思います。これは私のコードの範囲外です。なぜなら、この行を削除したのであれば、私のアプリは遅れがないからです。
AllowClearオプションをtrueに設定したので、
$('.select2-selection__clear').trigger('mousedown');
その後に$( 'myselectdropdown')を続けることができます。開いている提案ドロップダウンを閉じたい場合に備えて、select2 dom要素のイベントトリガー。
この$("#customers_select").select2("val", "");
を使って値をクリアする前に、リセットクリック時に他のコントロールにフォーカスを設定してみてください。
これにより、プレースホルダが再び表示されます。
それをするための[非常に]厄介な方法(私はそれがバージョン4.0.3で動作するのを見ました)
var selection = $("#DelegateId").data("select2").selection;
var evt = document.createEvent("UIEvents");
selection._handleClear(evt);
selection.trigger("toggle", {});
私はこの場合これを行います:
$('#select').val('');
$('.select2.select2-container').remove();
$('.select2').select2();
Select2バージョン4.0.9では、これが機能します。
$( "#myselect2" ).val('').trigger('change');
他の誰かがこれを経験したかどうかはわかりませんが、コードがトリガーにぶつかると(「変更」)、JavaScriptが停止し、トリガーから戻ることはなくなり、残りの関数は実行されませんでした。
私はjquerysがこれを期待しているとは言いたくないと思っています。私はそれをsetTimeoutでラップすることでそれを回避しました。醜いですが効果的です。