【问题标题】:select2 - how preselecting multiple options that receive data from an AJAX remote sourceselect2 - 如何预选从 AJAX 远程源接收数据的多个选项
【发布时间】:2018-11-12 01:12:12
【问题描述】:

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

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

在模态加载期间,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
});

一切正常,除非我点击编辑记录。

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

我尝试使用“附加”,但它最终会生成重复的选项。

$.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');

【问题讨论】:

    标签: jquery ajax jquery-select2


    【解决方案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");
    

    【讨论】:

    • 感谢您的合作,但是,您的建议适用于“静态”选项,但不幸的是,它不适用于“动态”加载(远程源 ajax)选项。
    • 正如你所提到的,你得到了重复的选项(通过追加),而不是追加,将 id 添加到数组并在 ajax 成功块中执行此代码,
    猜你喜欢
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2013-05-25
    • 1970-01-01
    相关资源
    最近更新 更多