【问题标题】:Select2 undefined issueSelect2 未定义的问题
【发布时间】:2013-07-24 10:10:57
【问题描述】:

以下函数从 URL 获取 json 数据并使用 jQuery 填充选择元素。我不是使用Select2 将下拉菜单转换为具有自动完成功能的字段。

除了显示选择元素后我立即得到的“未定义”字样外,一切正常。自动完成和下拉功能完美。我尝试使用数据占位符,即使添加了一个空的“选项”元素,但没有成功。

function CitiesList(callback){
 $.getJSON(document.URL+'getCities/sdfsfs', function(data){
    var html = '';
    var len = data.length;
    var option = '<option></option>';
    for (var i = 0; i< len; i++) {
        html += '<option value="' + data[i] + '">' + data[i] + '</option>';
    }
    $('.select_cities select').append(option);
    $('.select_cities select').append(html);
    if(callback && typeof callback == 'function'){
        callback.call(null);
    }

});
}

            <select data-placeholder="Select a city" name="cities" id="cities">
            </select>

'select_cities' 是选择元素周围的 div 包装器。

【问题讨论】:

    标签: jquery jquery-select2


    【解决方案1】:

    现在在 4.0.发送到结果格式化程序的消息可以在对象中配置(请参阅their GitHub example repo.text)或在从templateResult 属性调用的函数中硬编码。例如:

    templateResult: formatResult,
    

    //...

    function formatResult (result) {
    
    if (result.loading) return "Searching...";
    

    配置不是最容易找到的,因为在他们的 their GitHub example 中查找字符串 "Searching..." 的命中率为零,但回想起来非常直观。

    【讨论】:

    • 我认为 select2 必须获得更清晰的文档,因为它已经如此流行。这正是我几天前所面临的。
    【解决方案2】:

    我最近遇到了这个问题。如果设置了默认选项而没有相应的valuevalue 为空字符串,则似乎较新版本的 Select2 会出现问题,例如:

    <option value="" selected="selected">Select something</option>
    

    要么显式定义一个非空值,例如value="0",要么设置placeholderOption: 'first' 以强制Select2 使用第一个选项作为默认值:

    $('#select2-field').select2({
        placeholderOption: 'first'
    });
    

    【讨论】:

    • 很好的答案!谷歌搜索近 1 小时后开始使用!
    【解决方案3】:

    此问题已在 select2 的最新 (3.4.2) 版本中得到解决。升级,你应该很高兴!

    【讨论】:

    • 我确认 - 3.4.1 有这个问题,但在 3.4.2 中已修复
    • 在 3.4.5 中再次出现此问题
    • 这个问题存在于 4.0.2-rc.1
    【解决方案4】:

    我调查了这个错误,发现对formatSelection 的调用可以使其数据参数为数组或数据对象。

    要解决此问题,请编辑 select2.js 文件中的 formatSelection 函数,如下所示:

    formatSelection: function (data, container, escapeMarkup) {
            var dataElement = data ? (data[0] || data) : null;
            return dataElement ? escapeMarkup(dataElement.text) : undefined;            
    }
    

    这应该可以修复这个讨厌的错误并让你回到正确的轨道

    【讨论】:

    • 我知道这已经有好几年了,但是....我的双手被束缚在使用 3.5 上,这个错误不知何故悄悄出现。你的回答让我走上了正轨。我所要做的就是返回“data.TEXT”并忽略其余条件。当我的几十个人在没有定义 formatSelection 的情况下正常工作时为什么需要这样做我不知道。
    【解决方案5】:

    在您的脚本中添加以下行,这应该可以工作。

    <script>
        $(document).ready(function() { $("select").select2(); });
    </script>
    

    【讨论】:

    • CitiesList() 已经在 $(document).ready(function(){}) 中被调用,我会试一试..
    • 你能告诉我数据中的例子吗?我认为 data[i] 不包含实际值。这就是为什么给出 undefined
    • 好的,我已经设法通过添加回调函数找到了解决方案
    猜你喜欢
    • 2016-01-21
    • 2019-06-26
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多