Javascript 选择2 4.0 AJAX预填充方式?

Javascript 选择2 4.0 AJAX预填充方式?,javascript,jquery,json,ajax,select2,Javascript,Jquery,Json,Ajax,Select2,我已经读过了,根据文档,但没有一本适合我。 我正在尝试使用AJAX select2。我正在尝试创建一个通用的“选择”项 因此,对于所有具有data-select2-json属性的元素,我使用data-select2-json值中的ajax URL应用select2 $('[data-select2-json!=""][data-select2-json]').each(function() { var url = $(this).attr('data-select2-json');

我已经读过了,根据文档,但没有一本适合我。 我正在尝试使用AJAX select2。我正在尝试创建一个通用的“选择”项

因此,对于所有具有
data-select2-json
属性的元素,我使用
data-select2-json
值中的ajax URL应用
select2

$('[data-select2-json!=""][data-select2-json]').each(function() {
    var url = $(this).attr('data-select2-json');
    var pg_size = $(this).attr('data-select2-page-size') | 30;
    $(this).select2({
        language: language_code,
        tokenSeparators: [',', ' '],
        ajax: {
            url: url,
            dataType: 'json',
            delay: 300,
            data: function (params) {
                return {
                    q: params.term, // -> q=[search term]
                    page: params.page // -> page=[no page]
                };
            },
            processResults: function (data, params) {
                params.page = params.page || 1;
                console.log(data.items);
                return {
                    results: data.items,
                    pagination: {
                      more: (params.page * pg_size) < data.total
                    }
                };
            },
            cache: true
        },
        // let our custom formatter work
        escapeMarkup: function (markup) { return markup; },
        minimumInputLength: 1,
        templateResult: formatRepo,
        templateSelection: formatRepoSelection
    });
});
它非常接近您使用的AJAX示例。我的问题是AJAX Initialize:我想在HTML中添加值:

<select multiple="multiple" class="form-control"
        data-select2-json="/fr/chez-moi/tags/langues"
        multiple="multiple"
        name="known_languages">
    <option value="1" selected="selected">Français</option>
    <option value="2" selected="selected">Chinois simplifié</option>
</select>
我使用页面上提供的示例代码创建了一个。我只需更改他们的示例select标记以接受与您类似的多个:

<select multiple="multiple" ...
虽然我不知道您的
formatRepoSelection
代码是什么,但我认为如果您将其更改为以下内容,您的问题将得到解决:

function formatRepoSelection(repo) {
  return repo.item;
}
我的解决方法如下: 在对select元素执行select2()之前,获取其初始值:

var initval = selector.attr("value");
将其转换为select2后,使用initval创建一个选项:

if (initval) {
    var option = new Option(initval, initval, true, true);
    selector.append(option).trigger('change');
}

您可以对多值选择元素执行类似的操作。

我的答案对您无效吗?请提供反馈。我检查您的答案是否有效,因为您的答案确实有效。4小时后我醒来,尝试了我的代码,一切都正常:我真的不知道为什么。我什么也没碰!我是addind options+您建议的选定选项。也许每天工作14小时,连续工作10天有点太多了。。。非常感谢你的回答。
function formatRepoSelection(repo) {
  return repo.full_name || repo.text;
}
function formatRepoSelection(repo) {
  return repo.item;
}
var initval = selector.attr("value");
if (initval) {
    var option = new Option(initval, initval, true, true);
    selector.append(option).trigger('change');
}