Select2 v4 .val()不维护数据对象中元素的顺序

时间:2017-03-13 15:20:46

标签: javascript jquery select2 jquery-select2-4

我有一个select2(v4)选择框,人们在这里选择代码,并且必须维护订单。这在最初添加元素时效果很好: enter image description here

但是,这是一个用于页面上许多不同元素的弹出窗口。这意味着我必须清除这个数组,并在运行时加载存储的数据对象。

我的数据对象将订单保留为var codeArray = ['7990', '268']

但是当我使用时:

$(element).val(codeArray).trigger("change")

我得到以下内容:

enter image description here

如何在加载时维护订单?是否有偷偷摸摸的解决方法?

1 个答案:

答案 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

我只是根据我的需要调整了它。