使用 ajax 和 select2 设置数据属性

Posted

技术标签:

【中文标题】使用 ajax 和 select2 设置数据属性【英文标题】:set data attributes with ajax and select2 【发布时间】:2017-01-23 17:21:21 【问题描述】:

我正在尝试将数据属性设置为 select2 选项但没有成功,此时我有以下 JS 代码

_properties.$localElement.select2(
    ajax: 
        url: "url",
        type: "POST",
        dataType: 'json',
        delay: 250,
        data: function (params) 
        return 
            name: params.term, // search term
            type: 1
        ;
        ,
        processResults: function (data) 

            return 
            results: $.map(data, function (item) 
                return 
                    text: item.name,
                    source: item.source,
                    id: item.id
                
                )
            ;
        ,
        cache: true
    ,
    //define min input length
    minimumInputLength: 3,

);

我想为选定的选项值设置一个数据源。

【问题讨论】:

那么你的问题是什么?你有什么问题? 以上没有尝试设置(或获取)任何data-* 属性。 我尝试使用 resultTemplate 选项定义选项模板并在该输入上设置数据属性,但即使选择了正确的选项,该选项也没有设置自定义属性。 请提供更多信息,我们可以提供帮助。 我不明白这个问题的反对意见,我认为 OP 已经明确定义了他试图实现的目标和期望。这在我的情况下帮助了我,谢谢 Rubem。 +1 【参考方案1】:

我找到了解决方案,看起来 resultTemplate 没有格式化“视觉”选择的选项,需要使用 templateSelection 选项:

    templateSelection: function(container) 
        $(container.element).attr("data-source", container.source);
        return container.text;
    

【讨论】:

【参考方案2】:

您实际上可以使用您已经使用过的确切语法。 “source-attribute”只需要通过特定select2-option的data().data.source访问即可。

所以保持你的 processResults 函数像你一样:

processResults: function (data) 
   return 
      results: $.map(data, function (item) 
         return 
            text: item.name,
            source: item.source,
            id: item.id
         
      )
   ;
,

如果你想检索所选选项的来源,你可以这样做:

var selectedSelect2OptionSource = $("#idOfTheSelect2 :selected").data().data.source;

事实上,你可以在你的 processResults 函数中设置任何你想要的变量,然后通过 data().data.variableName 选择它!

【讨论】:

【参考方案3】:

我解决了这个问题。

$('select').on('select2:select', function (e) 
    var data = e.params.data;
    $("select option[value=" + data.id + "]").data('source', data.source);
    $("select").trigger('change');
);

【讨论】:

以上是关于使用 ajax 和 select2 设置数据属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 ajax 在 Select2 上未显示数据

为 Vue Select2 包装器组件使用动态 AJAX URL

使用 select2 ajax 发送 data-* 属性

如何在 laravel 中使用 AJAX 数据时设置 Select2 的选定值?

使用 Ajax 源设置 select2 元素初始值的简单示例?

Yii2 - 使用 Ajax 加载为 Select2 插件设置值