select2-如何预先选择从AJAX远程源接收数据的多个选项

时间:2018-11-12 01:12:13

标签: jquery ajax jquery-select2

我有一个模态,它具有两个“行为”,一个用于创建新记录,另一个用于编辑现有记录,具体取决于单击哪个按钮(新建/编辑)。

单击“编辑”时,记录数据(“用户”表)与子记录(“权限”表)一起“加载”。

在模式加载过程中,select2被初始化:

let $select2user    = $(".select2user");

$select2user.select2({
    ajax: {
        url: 'getUsersWithPermissions.php',
        type: "GET",
        dataType: 'json',
        data: function (params) {
            return {
                search: params.term,
                page: params.page || 1
            };
        },
        processResults: function (data) {
            data.page = data.page || 1;
            return {
                results: data.items.map(function (item) {
                    return {
                        id: item.id,
                        text: item.name
                    };
                })
            }
        },
        cache: true,
        delay: 250
    },
    multiple: true
});

一切正常,除非单击“编辑记录”。

使用注册表数据正确填写了输入表单(模态),但是,我无法从子记录(权限表)中预先选择多个选项。

我尝试使用'append',但最终会产生重复的选项。

$.each( value, function( permissions, permission ) {
  console.log(permission['name']); // ok
  let newOption = new Option(permission['name'], permission['id'], false, true);
  $select2user.append(newOption);
});
$select2user.trigger('change');

1 个答案:

答案 0 :(得分:1)

$(document).ready(function() { 
  $("#selectlist").select2();
  
  var _selectedValues = [];
  _selectedValues.push('1');
  _selectedValues.push('5');
  _selectedValues.push('8');
  $("#selectlist").select2().val(_selectedValues).trigger("change");
  
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js"></script>
<select id="selectlist" class="form-control" name="selectList[]" multiple="multiple" style="width:200px">
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
  <option value="4">Four</option>
  <option value="5">Five</option>
  <option value="6">Six</option>
  <option value="7">Seven</option>
  <option value="8">Eight</option>
  <option value="9">Nine</option>
  <option value="10">Ten</option>
</select>

您可以尝试这样设置select2中的值。

var _selectedValues = [];
_selectedValues.push('1');
_selectedValues.push('2');
_selectedValues.push('3');
$("#selectlist").select2().val(_selectedValues).trigger("change");