jquery Select 2多选-如何停止自动排序?

b4wnujal  于 2023-02-12  发布在  jQuery
关注(0)|答案(2)|浏览(250)

当你选择多个项目时,它们是按字母顺序排序的。我们想预设选择顺序而不排序。也就是说,如果我选择"B",然后选择"A",多选应该显示"B","A"而不是"A","B"。如何实现?

<select id="multiple" class="form-control select2-multiple" multiple>
<optgroup label="Alaskan">
<option value="A">A</option>
<option value="B">B</option>
</optgroup>
</select>

谢谢。

zu0ti5jz

zu0ti5jz1#

Select 2 v4有一个解决方案。它改变了项目的顺序-用户选择的项目被移到最后。

$("select").select2();

$("select").on("select2:select", function (evt) {
  var element = evt.params.data.element;
  var $element = $(element);

  $element.detach();
  $(this).append($element);
  $(this).trigger("change");
});



<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.css" rel="stylesheet"/>

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.js"></script>

<select style="width: 500px;" multiple="multiple">
  <option>two</option>
  <option>four</option>
  <option>six</option>
</select>

Source

wz3gfoph

wz3gfoph2#

当选择是确定的时候使用这个!

$("select").on("select2:select", function (evt) {
  var element = evt.params.data.element;
  var $element = $(element);

  $element.detach();
  $(this).append($element);
  $(this).trigger("change");
});

但是服务器渲染将自动排序...所以可以尝试这种方式

var serverRenderData = ['D', 'B'];
//usually we render data by this way, but select2 will auto sorting
$("select").val(serverRenderData).trigger('change');

//so we re-append select data
var options = [];
for (var i = 0; i < serverRenderData.length; i++) {
    options.push($("select option[value=" + serverRenderData[i] + "]"));
}
$("select").append(...options).trigger('change');

jsFiddle demo

相关问题