素晴らしい Select2 ライブラリを使用して、プログラムでドロップダウンをクリアしようとしています。ドロップダウンには、Select2 query
オプションを使用したリモートajax呼び出しが動的に入力されます。
HTML:
<input id="remote" type="hidden" data-placeholder="Choose Something" />
Javascript:
var $remote = $('#remote');
$remote.select2({
allowClear: true,
minimumInputLength: 2,
query: function(options){
$.ajax({
dataType: 'json',
url: myURL + options.term,
error: function(jqXHR, textStatus, errorThrown){
smoke.alert(textStatus + ": server returned error on parsing arguments starting with " + options.term);
},
success: function(data, textStatus, jqXHR){
var results = [];
for(var i = 0; i < data.length; ++i){
results.Push({id: data[i].id, text: data[i].name});
}
options.callback({results: results, more: false});
}
});
}
});
残念ながら、$remove.select2('val', '')
を呼び出すと、次の例外がスローされます。
Uncaught Error: cannot call val() if initSelection() is not defined
attr
、val
、text
、およびSelect2固有のdata
関数を設定しようとしました。男を明確にし、マナーのようなラジオボタンで作業することはできません。誰か提案がありますか?
これは私のために働く:
$remote.select2('data', {id: null, text: null})
また、そのようにクリアするとjQuery validateでも機能します。
-2013-04-09を編集
この応答を書いている時点では、それが唯一の方法でした。最近のパッチでは、適切でより良い方法が利用可能になりました。
$remote.select2('data', null)
Select2バージョン4+の場合
構文が変更されたため、次のように記述する必要があります。
// clear all option
$('#select_with_blank_data').html('').select2({data: [{id: '', text: ''}]});
// clear and add new option
$("#select_with_data").html('').select2({data: [
{id: '', text: ''},
{id: '1', text: 'Facebook'},
{id: '2', text: 'Youtube'},
{id: '3', text: 'Instagram'},
{id: '4', text: 'Pinterest'}]});
これは適切なものです。select2は選択した値をクリアし、プレースホルダーを表示します。
$remote.select2('data', null)
Select2バージョン4の場合、これを簡単に使用できます。
$('#remote').empty();
Select要素にajax呼び出しを入力した後、コンテンツを更新するには、成功セクションに次のコード行が必要になる場合があります。
success: function(data, textStatus, jqXHR){
$('#remote').change();
}
Select2バージョン4を使用すると、この短い表記を使用できます。
$('#remote').html('').select2({data: {id:null, text: null}});
これは、作成時にselect2にnull IDとテキストを含むjson配列を渡しますが、最初に.html('')
で以前に保存された結果を空にします。
これを使用する必要があります:
$('#remote').val(null).trigger("change");
提案された方法@Lelio Faietaは私のために働いていますが、 bootstrap theme を使用しているため、select2のすべてのbootstrap設定を削除します。そこで、次のコードを使用しました。
$("#remote option").remove();
私は少し遅れていますが、これは最後のバージョン(4.0.3)で機能しているものです。
$('#select_id').val('').trigger('change');
これらの両方がドロップダウンをクリアするのに役立ちます:
.select2('data', null)
.select2('val', null)
しかし、重要な注意:値はリセットされません。val()は、選択されていなくても最初のオプションを返します。 Select2 3.5.3を使用しています
これにより、バージョン3.5.2で問題が解決しました。
$remote.empty().append(new Option()).trigger('change');
この問題 によると、プレースホルダーを表示するにはselectタグ内に空のオプションが必要です。
Select2を実際にクリーンアップするには、> 4.0から、以下を実行する必要があります。
$remote.select2.val('');
$remote.select2.html('');
selectedValues = []; // if you have some variable where you store the values
$remote.select2.trigger("change");
最初の質問に基づいてselect2を選択することに注意してください。ほとんどの場合、別の方法でselect2を選択します。
それが役に立てば幸い。
私は答えを見つけました(user780178への賛辞)私はこの他の質問で探していました:
$("#customers_select").select2("val", "");
これを使用するか、さらに参照することができます https://select2.org/programmatic-control/add-select-clear-items
$('#mySelect2').val(null).trigger('change');
それらのすべてが私のために働いていなかったので(select2 4.0.3)、std selectの方法になりました。
for(var i = selectbox.options.length - 1 ; i >= 0 ; i--)
selectbox.remove(i);