Select2 v4 .val() 不维护数据对象中元素的顺序
Select2 v4 .val() does not maintain order of elements in data object
我有一个 select2 (v4) select 框,人们在其中选择代码,必须保持顺序。当他们最初添加元素时,这很有效:
但是,这是一个用于页面上许多不同元素的弹出窗口。这意味着我必须清除这个数组并动态加载存储的数据对象。
我的数据对象将顺序保留为 var codeArray = ['7990', '268']
。
但是当我使用时:
$(element).val(codeArray).trigger("change")
我得到以下信息:
如何维护加载顺序?有偷偷摸摸的解决方法吗?
好吧,这个修复程序很老套,但我会 post 我所拥有的:
function rebuildForm(codeArray) {
clearFormContents();
$.each(codeArray, function(j,obj){
var found = false;
code_list.some(function(el){
if (el.value == obj) {
var str = (el.text).split(")");
$("element option[value=" + el.value + "]").remove();
$(element).append(new Option("(" + el.value + ")" + str[1] , obj));
found = true;
}
})
if (!found) {
$(element).append(new Option("(" + obj + ") Custom Tag" , obj));
}
$(element).val(codeArray).trigger("change");
}
抱歉,如果上面的代码不能完美运行,我不得不清理它以去除一些绒毛并隐藏 client/project 身份。
基本上,在重建表单时,我清除了旧表单内容,然后循环遍历数组以获取每个 value/object。然后,如果该值存在于 select2 元素的原始代码选项列表中,我删除该选项并重建它。这会将它附加到元素列表的底部,以便在框中保持顺序。我还使用 'found' 布尔值添加任何自由格式的文本标签。
在 "correct" 顺序中创建新的选项列表后,我就可以将值添加回 select 输入 DOM 元素并触发 select2 更改以构建标签。
这个由@RohitS 在评论中 post 编辑的帖子展示了这个概念:https://github.com/select2/select2/issues/3106
我只是根据需要对其进行了调整。
我有一个 select2 (v4) select 框,人们在其中选择代码,必须保持顺序。当他们最初添加元素时,这很有效:
但是,这是一个用于页面上许多不同元素的弹出窗口。这意味着我必须清除这个数组并动态加载存储的数据对象。
我的数据对象将顺序保留为 var codeArray = ['7990', '268']
。
但是当我使用时:
$(element).val(codeArray).trigger("change")
我得到以下信息:
如何维护加载顺序?有偷偷摸摸的解决方法吗?
好吧,这个修复程序很老套,但我会 post 我所拥有的:
function rebuildForm(codeArray) {
clearFormContents();
$.each(codeArray, function(j,obj){
var found = false;
code_list.some(function(el){
if (el.value == obj) {
var str = (el.text).split(")");
$("element option[value=" + el.value + "]").remove();
$(element).append(new Option("(" + el.value + ")" + str[1] , obj));
found = true;
}
})
if (!found) {
$(element).append(new Option("(" + obj + ") Custom Tag" , obj));
}
$(element).val(codeArray).trigger("change");
}
抱歉,如果上面的代码不能完美运行,我不得不清理它以去除一些绒毛并隐藏 client/project 身份。
基本上,在重建表单时,我清除了旧表单内容,然后循环遍历数组以获取每个 value/object。然后,如果该值存在于 select2 元素的原始代码选项列表中,我删除该选项并重建它。这会将它附加到元素列表的底部,以便在框中保持顺序。我还使用 'found' 布尔值添加任何自由格式的文本标签。
在 "correct" 顺序中创建新的选项列表后,我就可以将值添加回 select 输入 DOM 元素并触发 select2 更改以构建标签。
这个由@RohitS 在评论中 post 编辑的帖子展示了这个概念:https://github.com/select2/select2/issues/3106
我只是根据需要对其进行了调整。