イベント時のselect2拡張コントロールのプレースホルダーを変更したいと思います。
だから私はこれを持っています...
<select id="myFoo" placeholder="Fight some foo...">
...次に強化されます:
init: function(){
$('#myFoo').select2();
},
...これで正しいプレースホルダーができました。
しかし、イベントに反応してプレースホルダーをクリアしたいのですが...
someButtonPress: function(){
// $('#myFoo').placeholder("");
// $('#myFoo').attr('placeholder', "");
// $('#myFoo').select2('placeholder',"");
// $('#myFoo').select2({placeholder:""});
// none of these work
}
これはとても基本的なようですが、私は困惑しています。
ドキュメントに何も見つかりません。私は間違った場所を見ていますか?
更新
HTML _data-placeholder
_属性を介してプレースホルダーを設定した場合は、内部オプションではなく、プレースホルダーを変更する必要があるため、 Fabian H。 が示唆するようになります。
_$select.attr("data-placeholder", "New placeholder text");
$select.data("select2").setPlaceholder();
_
または、そうでない場合は、内部オプション_select2.opts.placeholder
_を使用します。
_var select2 = $select.data("select2");
select2.opts.placeholder = "New placeholder text";
select2.setPlaceholder();
_
もちろんこれは完璧ではありませんが、select2で生成されたHTMLをハッキングするよりもはるかに優れています。
this.$select.data("select2")
は内部select2オブジェクトを取得するため、そのプロパティとメソッドにアクセスできます(外部から使用するためにエクスポートされたものだけでなく)placeholder
内部オプションを更新するか、関連するデータ属性を変更しますsetPlaceholder
をトリガーしています。お役に立てば幸いです。
プレースホルダーを動的に変更する場合は、HTMLに設定しないでください
<select id="myFoo">
jQueryで設定する
$('#myFoo').select2({
placeholder: "your placeholder"
});
次に、このように更新します
someButtonPress: function(){
$('#myFoo').select2({
placeholder: "change your placeholder"
});
}
それは私のために働きます、それが役立つことを願っています。
Select2のプレースホルダーをリモートデータ(AJAX/JSONP)で更新するには、次のコードを使用します。
$input = $("input#e7");
$input.attr("data-placeholder", "New placeholder");
var select2 = $input.data("select2");
select2.setPlaceholder();
クレジット ブロックの応答 。
プレースホルダーを更新する別の方法は、select要素に「placeholder」属性を設定し、select2()を再度呼び出すことです。
$('#IdForSelectElement').attr('placeholder', 'New Placeholder Text').select2();
初めてselect2にオプションを渡した場合は、それらを再度渡す必要があることを覚えておいてください(または、$。fn.select2.defaultsを使用してデフォルトオプションを設定するだけです)。
Select2 4.0.5 Standardを使用していますが、既存のソリューションが機能しないか、プレースホルダーの更新ごとにselect2を再作成する必要がありましたが、これは避けたかったのです。
それがハックであっても、私は新しい解決策を思いついた。 select2コンテナを保存して、後で簡単にアクセスできるようにします。プレースホルダーを更新する必要がある場合は、コンテナー内のプレースホルダー要素を見つけて、そのテキストを更新します。
var selectorSelect2 = $('#selector').data('select2').$container;
...
selectorSelect2.find('.select2-selection__placeholder').text('Updated Text 1');
...
selectorSelect2.find('.select2-selection__placeholder').text('Updated Text 2');
オプションも動的に変更する場合は、プレースホルダーを有効にするために、追加の空のオプションをキューに入れる必要があります。例えば:
response.unshift({id: '', text: ''});
$('#elem).select2({placeholder: 'Select..', data: response});
動作は、使用しているSelect2のバージョン(v3.5.1を使用)によって異なると思いますが、プレースホルダーをオンデマンドで変更するには、少し異なるアプローチをとる必要がありました。私の場合、セレクターは別のセレクターの値に基づいて表示されるオプションを変更します。つまり、プレースホルダーは新しいデータセットで変更する必要があります。
これを機能させるには、HTML入力要素のプレースホルダーへの参照をすべて削除する必要がありました。
_<input type="text" class="form-control span10">
_
次に、Javascriptで、正しいオプションを使用して要素をロードするたびに、data()
関数を介してプレースホルダーを更新する必要がありました。
_selector.data('placeholder', placeholder);
selector.select2({ data: new_data_set, tags: true });
_
それは今では毎回うまくいくようです。