javascript - formatSelection 在 select2.js 中不起作用

标签 javascript jquery html jquery-select2 ui-select2

我正在使用 select2.js 通过 ajax 调用用多个值填充该字段。

下面是我正在使用的代码。

HTML

<input id="id_test_name" class="form-control">

脚本

<script type="text/javascript">
    $("#id_test_name").select2({
        placeholder: "Search for an Item",
        minimumInputLength: 2,
        ajax: {
            url: "/resourse/?format=json&name=xyz",
            dataType: 'json',
            quietMillis: 100,
            data: function (term, page) {
                return {
                    option: term
                };
            },
            results: function (data, page) {
                return {
                    results: $.map(data.results, function (item) {
                        return {
                            name: item.name,
                            abbreviation: item.abbreviation,
                            id: item.id
                        }
                    })
                };
            }
        },
        formatResult: function (data, term) {
            return data.name + '(' +  data.abbreviation +')';
        },
        formatSelection: function (data) {
            return data.name + '(' +  data.abbreviation +')';
        },
        dropdownCssClass: "bigdrop",
        escapeMarkup: function (m) {
            return m;
        }
    });
</script>

结果正在下拉列表中填充,但我无法选择填充的结果,我无法找到我做错了什么?

我还需要一些其他(隐藏)字段中所选结果的 ID。

更新: jsfiddle:http://jsfiddle.net/n5phohov/2

最佳答案

如果您使用当前的 select2 v4,则参数 formatResult 和 formatTemplate 已替换为 templateResult 和 templateSelection。您还可以调用函数来格式化结果。看下面的例子,观察我使用了包含在数据属性中的base64图像,您可以轻松替换为与该选项匹配的图像链接。

$('#combo').select2({
        language : "pt-BR",
        allowClear: true,
        placeholder: "Selecione",
        templateResult: formatSingleResult,        
        templateSelection: formatSelected       
    }).on('select2:select', function (e) {
    var data = e.params.data;
    let thumbnailValue='';
    $(data.element.attributes).each( function (){
        if ($(this)[0].name == 'data-thumbnail' ){        
            thumbnailValue = $(this)[0].value;
        }
    });

function formatSelected(state) {
    let img='';
    if (printImage == true){
          img='<img src="' + $(state.element).attr('data-thumbnail') +'" class="comboImg"/>';
  }
  $item = $(`<span>${img} ${state.text.trim()}<span>`); 
  return $item;
}

function formatSingleResult (result) {
    if (!result.id) {
        return result.text.trim();
    } 
    let img="";
        if (printImage == true){
        img='<img src="' + $(result.element).attr('data-thumbnail') +'" class="flag"/>';
    }    
    const optionText = result.text.trim();  
    const $item = $(`<span>${img} ${optionText}<span>`);
    return $item;
}

关于javascript - formatSelection 在 select2.js 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32689698/

相关文章:

javascript - jQuery - 发现 id 存在于 iframe 条件失败

c# - 为什么我的 C# 变量在 Jquery 中返回 null?

javascript - jQuery fileupload动态创建表单并发送到s3

javascript - 如何初始化阿拉伯语/波斯语键盘的文本输入?

html - 防止 iOS Safari 将输入的第一个字母大写

javascript - "onDrag"事件未在 react.js 中触发

javascript - 使用 XMLHTTPRequest 下载图片

javascript - 使用下拉菜单按名称排序

python - 尝试使用 Scrapy 抓取表格

javascript - 使用纯 JavaScript 创建对此 HTML 元素的引用的最有效方法是什么?