Select2 以编程方式附加选项不以形式发送
Select2 programatically append options not send in form
为什么在将编程附加选项发送到 Select2 元素时不识别表单?
Html
Jquery 选择 2
$('#subrecursos').select2({
width: null,
multiple: true,
allowClear: true,
tags: true,
"language": {
"noResults": function () {
return "<i>Please Add Subresource as 'Name'|'Cost'|'Price'|'Capacity'(19V|50|70|2 or 20V)</i>";
}
},
escapeMarkup: function (markup) {
return markup;
},
id: function (object) {
return object.text;
},
//Allow manually entered text in drop down.
createSearchChoice: function (term, data) {
if ($(data).filter(function () {
return this.text.localeCompare(term) === 0;
}).length === 0) {
return { id: term, text: term };
}
}
});
Jquery 附加选项
for (var i = 0; i < parseInt($("#limitsub").val()) ; i++)
{
var valsub = (i + 1) + '-' + $("#nsubcant").val() + '|||' + $("#cantsub").val();
var option='<option value="' + valsub + '" >' + valsub + '</option>';
$("#subrecursos").append(option);//append the option
$(".select2-selection__rendered").append('<li class="select2-selection__choice" title="' + valsub + '"><span class="select2-selection__choice__remove" role="presentation">×</span>' + valsub + '</li>');
//append the tags
}
追加之前:
追加后:
到这里为止一切正常,
但是发送表格时,选项无法识别。
添加标签时,输入的选项会在表单中识别。
为什么会这样?为什么只识别输入的选项而不是以编程方式添加的?
非常感谢!!
我在 jsfiddle 上创建了一个简单的工作 https://jsfiddle.net/bindrid/dj4tj1ak/ 如果在选择项目后获取数据,它会被编码以记住所选的值。
var sel2Options = {
width: null,
multiple: true,
allowClear: true,
tags: true,
"language": {
"noResults": function () {
return "<i>Please Add Subresource as 'Name'|'Cost'|'Price'|'Capacity'(19V|50|70|2 or 20V)</i>";
}
},
escapeMarkup: function (markup) {
return markup;
},
id: function (object) {
return object.text;
},
//Allow manually entered text in drop down.
createSearchChoice: function (term, data) {
if ($(data).filter(function () {
return this.text.localeCompare(term) === 0;
}).length === 0) {
return { id: term, text: term };
}
}
};
$('#subrecursos').select2(sel2Options);
然后是第二部分
for (var i = 0; i < parseInt($("#limitsub").val()) ; i++) {
var valsub = (i + 1) + '-' + $("#nsubcant").val() + '|||' + $("#cantsub").val();
var option = '<option value="' + valsub + '" >' + valsub + '</option>';
$("#subrecursos").append(option);//append the option
//append the tags
}
$('#subrecursos').select2("destroy");
$('#subrecursos').select2(sel2Options);
附加选项 $(".select2-selection__rendered").append(
的方式不适合 select2 ,当您发送表单时 select2 需要格式化表单的 selection数据,但你的 selection 在 select2 数据收集中找不到。
$("#subrecursos").append(option);
这种方法是好方法,但是之后你必须 $("#subrecursos").val([1,2]).trigger('change')
来制作倍数 selection
看看这个 answer,有人问如何添加 select2 选项和 select 它们。我认为这正是您所需要的更强大的方式
为什么在将编程附加选项发送到 Select2 元素时不识别表单?
Html
Jquery 选择 2
$('#subrecursos').select2({
width: null,
multiple: true,
allowClear: true,
tags: true,
"language": {
"noResults": function () {
return "<i>Please Add Subresource as 'Name'|'Cost'|'Price'|'Capacity'(19V|50|70|2 or 20V)</i>";
}
},
escapeMarkup: function (markup) {
return markup;
},
id: function (object) {
return object.text;
},
//Allow manually entered text in drop down.
createSearchChoice: function (term, data) {
if ($(data).filter(function () {
return this.text.localeCompare(term) === 0;
}).length === 0) {
return { id: term, text: term };
}
}
});
Jquery 附加选项
for (var i = 0; i < parseInt($("#limitsub").val()) ; i++)
{
var valsub = (i + 1) + '-' + $("#nsubcant").val() + '|||' + $("#cantsub").val();
var option='<option value="' + valsub + '" >' + valsub + '</option>';
$("#subrecursos").append(option);//append the option
$(".select2-selection__rendered").append('<li class="select2-selection__choice" title="' + valsub + '"><span class="select2-selection__choice__remove" role="presentation">×</span>' + valsub + '</li>');
//append the tags
}
追加之前:
追加后:
到这里为止一切正常, 但是发送表格时,选项无法识别。 添加标签时,输入的选项会在表单中识别。 为什么会这样?为什么只识别输入的选项而不是以编程方式添加的? 非常感谢!!
我在 jsfiddle 上创建了一个简单的工作 https://jsfiddle.net/bindrid/dj4tj1ak/ 如果在选择项目后获取数据,它会被编码以记住所选的值。
var sel2Options = {
width: null,
multiple: true,
allowClear: true,
tags: true,
"language": {
"noResults": function () {
return "<i>Please Add Subresource as 'Name'|'Cost'|'Price'|'Capacity'(19V|50|70|2 or 20V)</i>";
}
},
escapeMarkup: function (markup) {
return markup;
},
id: function (object) {
return object.text;
},
//Allow manually entered text in drop down.
createSearchChoice: function (term, data) {
if ($(data).filter(function () {
return this.text.localeCompare(term) === 0;
}).length === 0) {
return { id: term, text: term };
}
}
};
$('#subrecursos').select2(sel2Options);
然后是第二部分
for (var i = 0; i < parseInt($("#limitsub").val()) ; i++) {
var valsub = (i + 1) + '-' + $("#nsubcant").val() + '|||' + $("#cantsub").val();
var option = '<option value="' + valsub + '" >' + valsub + '</option>';
$("#subrecursos").append(option);//append the option
//append the tags
}
$('#subrecursos').select2("destroy");
$('#subrecursos').select2(sel2Options);
附加选项 $(".select2-selection__rendered").append(
的方式不适合 select2 ,当您发送表单时 select2 需要格式化表单的 selection数据,但你的 selection 在 select2 数据收集中找不到。
$("#subrecursos").append(option);
这种方法是好方法,但是之后你必须 $("#subrecursos").val([1,2]).trigger('change')
来制作倍数 selection
看看这个 answer,有人问如何添加 select2 选项和 select 它们。我认为这正是您所需要的更强大的方式