テキストを追加する場合は、select2
freeform
テキストオプションを使用して、新しい値にテキストを追加しようとしています。私がselect要素(私の場合、mvcヘルパーの方法で)に設定したいテキストが追加されました。Select2 templateResultデータには参照する要素がありません
問題は、templateResultに入ってくるデータに要素がないことです。私が検索したところでは、data.elementはDOMに入るために使われますが、それは私のためではありません。 createTag関数を見ると、paramsにも要素がありません。また、コンテナは、明らかにまだdomにはなく、子供や親ではない "li"です。ここ
コードである:
$('.custom-dropdown').each(function() {
$(this).css('width', '100%');
if ($(this).hasClass('freeform')) {
$(this).select2({
tags: true,
createTag: function(params) {
return {
id: params.term,
text: params.term,
newOption: true
}
},
templateResult: function(data, container) {
var $result = $("<span></span>");
$result.text(data.text);
if (data.newOption) {
//data.element is undefined here!!!
}
}
return $result;
},
placeholder: "Press ENTER for list of options",
allowClear: true,
selectOnClose: true
});
} else {
$(this).select2({
placeholder: "Press ENTER for list of options",
allowClear: true,
selectOnClose: true,
});
}
$(this).on('select2:select', function(e) {
if (e.params.data.text != '') {
var id = $(this).attr('id');
var select2 = $("span[aria-labelledby=select2-" + id + "-container]");
select2.removeAttr('style');
}
}); $(this).on('select2:close', function() {
$(this).focus();
});
});
セレクトの例は次のようになります
class="custom-dropdown freeform"
data-appendme="blorg"
ありがとう、それは小さな修正を加えたトリックでした。 data.newOptionのtemplateResultチェックは、テキストがすでに設定可能な状態になっているので不要で、newOptionに設定されていないため、既存のドロップダウン項目はすべて削除されます。だからブロックして$ resultを返すだけで完璧です。 – Alex
@blackmiaool、最初の文字を入力すると、新しいタグがすぐに作成(選択)されるのはなぜですか? – beaver