ui-select2 - 在列表底部显示添加新标签

时间:2014-03-24 16:38:25

标签: ui-select2

添加新标记时ui-select2中的默认值使当前文本选项显示在下拉列表的顶部。

例如,如果我想输入"英语,"我输入选项列表中的项目,因为我键入" Eng,"自动建议的文字"英文"在下拉列表中排名第二,而" Eng"首先显示(即添加新标签" Eng"而不是选择现有选项"英语")。

如果我想键入" Eng"这有点问题。并按Enter键以获得推荐选项"英语,"但我想选择创建不属于现有选项列表的自己的标签。我能想到的最佳解决方案是将当前输入的文本选项(" Eng")移到底部,并列出推荐选项列表(在本例中为" English& #34;)首先出现。

有没有办法在ui-select2中执行此操作?我尝试使用createSearchChoicePosition,如下所示:

createSearchChoice: function(term) { return {id: 3,text:term}; },
createSearchChoicePosition: 'top'

但它并没有影响任何事情(即使我将位置改为'底部')。有没有其他方法可以做到这一点,还是我错误地使用createSearchChoicePosition?

2 个答案:

答案 0 :(得分:2)

在这里你可以找到一个可能的解决方案:

    $('.select2field').select2({
        tags: null,
        createSearchChoice: function (term, data) {
            console.log('createSearchChoice');
            console.log(data);
            return {
                id: -1,
                text: term,
                isNew: true
            };
        },
        createSearchChoicePosition: 'bottom',
        width: '300px',
        query: function (options) {
            console.log('query');
            options.context = options.context || {
            };
            if (options.page === 1 )
            {
                var result = {
                    results: [
                        {id: 0, text: 'English'},
                        {id: 1, text: 'Spanish'},
                        {id: 2, text: 'Chinese'}
                    ],
                    more: true
                };
                options.callback(result);
            }
            else if (options.page === 2)
            {
                var result = {
                    results: [
                        {id: 3, text: 'French'},
                        {id: 4, text: 'German'},
                        {id: 5, text: 'Portugese'}
                    ],
                    more: false
                };
                options.context.page = 2
                options.callback(result);
            }
        }
    })
    .on('select2-loaded', function(items) { 
        console.log('select2-loaded');
        console.log(items);
    })
    .on('select2-selecting', function(e) {
        if (e.object.isNew) {
            alert("Is new!");
        }
    });

这是jsfiddle的例子:jsfiddle example

如您所见,结果通过“query”函数返回到select2控件,并模拟ajax调用。 它将新元素放在第一页的底部(中文和法文之间)。这是CreateSearchChoicePosition的正常行为。 希望这会有所帮助。

答案 1 :(得分:0)

我并不是想通过暗示这一点来迂腐(因为我已经遭受了你所描述的同一个问题),但是你检查了你引用的select2的版本吗?

在我的情况下,我无意中提到了v3.4.5:使用比这更新的版本解决了我的问题。

这可以用soycabanillas'来证明。 JSFiddle的例子是将他的外部资源从3.4.6降级。

希望这有帮助。