我有一个select2(v4)选择框,人们在这里选择代码,并且必须维护订单。这在最初添加元素时效果很好:
但是,这是一个用于页面上许多不同元素的弹出窗口。这意味着我必须清除这个数组,并在运行时加载存储的数据对象。
我的数据对象将订单保留为var codeArray = ['7990', '268']
。
但是当我使用时:
$(element).val(codeArray).trigger("change")
我得到以下内容:
如何在加载时维护订单?是否有偷偷摸摸的解决方法?
答案 0 :(得分:0)
好的,修复很糟糕,但我会发布我的内容:
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");
}
很抱歉,如果上述代码无法正常运行,我必须清除它以删除一些漏洞并隐藏客户端/项目标识。
基本上,在重建表单时,我清除旧的表单内容,然后循环遍历抓取每个值/对象的数组。然后,如果值存在于select2元素的原始代码列表中,则删除该选项并重建它。这会将其附加到元素列表的底部,以便在框中维护订单。我还使用'found'布尔值添加任何自由格式文本标签。
一旦以“正确”的顺序创建了新的选项列表,我就可以将值添加回选择输入DOM元素并触发select2更改以构建标记。
@RohitS在评论中发布的这个帖子显示了这个概念:https://github.com/select2/select2/issues/3106
我只是根据我的需要调整了它。