私はDjangoで多対多の関係のためにSelect2を使用しています。あらゆる種類の検証制約のため、Select2タグフィールドに入力するとAJAXリクエストを介して関連オブジェクトを作成するのが最も簡単です。最小限の例の下(およびFiddle)。Select2はすべての最初のタグを削除します
HTML:CSSの
<select class="js-example-tags form-control" multiple="" tabindex="-1" aria-hidden="true"></select>
ビット:
.js-example-tags {
width: 100%;
}
そして、JS:
function register(event) {
console.log(event);
if (event.params.data.id == event.params.data.text) {
$.ajax({
type: 'POST',
url: 'https://www.random.org/integers/?num=1&min=0&max=999&col=1&base=10&format=plain&rnd=new',
success: function(data) {
$('option[value="' + event.params.data.text + '"').attr('value', data);
},
error: function(jqXHR, textStatus, errorThrown) {
$('option[value="' + event.params.data.id + '"]').remove();
}
});
}
}
$(".js-example-tags").select2({
tags: true,
data: [{"text": "Known Author 1", "id": 1}, {"text": "Known Author 2", "id": 2}]
});
$(".js-example-tags").on('select2:select', register);
ユーザーヒットを返す:
- ・セレクトを
- 、値=プレースホルダとしてテキストと
- トリガー
select2:select
イベントとそのAJAX呼び出し(たぶん)新しく作成されたオブジェクトIDが返され、したがってregister
機能、 - で新しいオプションを追加することになっています以前のオプション値を実際の値に置き換えます。
しかし、明らかに、何らかの形で他の何かが起こる:最初のタグを正しく追加された - 少なくとも外観から - しかし、あなたは第二のタグを追加するとき、それはリターンを押すと消え、以降第三タグから、新しいですタグが最初のタグを上書きします。
この時点では、Select2のドキュメントは最小限に抑えられている可能性があります。ありがとうございました!
本当に何か他のことが起こっていて、何が欲しいのですか。 –
なぜこのような状態は 'event.params.data.id == event.params.data.text'ですか? – Buksy
@Buksyオプション値にプレースホルダデータが含まれている場合、(私が知っている限り)trueを返します。私は既に登録されている値を再登録しないようにしたい。 (私は実際の動作の説明を追加しようとすることができますが(フィドルは明確にする必要がありますが、意図した動作は質問からはっきりしているはずです)、 –