如何为新标记将默认ID设置为0

时间:2014-08-19 10:27:04

标签: angularjs jquery-select2 ui-select2 angularjs-select2

如何为不在列表中的标签设置默认ID为0?

[DEMO LINK][1]

LINK

在上面,例如,如果我们从现有中选择,那么它带有id(1或2或3),但如果添加新标签并按Enter键,则id变为文本,我希望id为o设置为new标签或不在列表中。

怎么做?

1 个答案:

答案 0 :(得分:0)

CreateSearchChoice应该是你要找的东西

这里有一个类似的我刚才问过select2 createSearchChoice id from post

createSearchChoice: function (term, data) {
    if ($(data).filter(function () {
            return this.text.localeCompare(term) === 0;
        }).length === 0) {
            // if not found in current list
            // return {id:term, text:term}

            return {
            id: term,
            text: $.trim(term) + ' (new tag)'
            };

},

注意我将id设置为新文本术语,您可以将其设置为类似-1 / term的连接值,然后稍后解析,但是术语必须包含在此解决方案的ID中

然后在更改事件上,我确定id是否为数字(已存在)。如果它不是数字(在createsearchchoice中添加),我会经历我发布到标签数据库的过程

.on("change", function(e) {
    if (e.added) { //is it added from select2
    if (isNumeric(e.added.id)){ //did it already exist or createsearchchoice
        add(e.added.id); //it already existed, just add it to the tag list
        } else { //id was created on the fly, post to the database and return a tag id
            $.post('handlers/tags.ashx', { 
               operation:"select2createtag", 
               //because its not numeric, we know id = new tag text
               text: $.trim(e.added.id)} ,   
               function(data){
               //set the added id to the id you just returned from sql
                e.added.id = data.id;
                //...do something else, like then add the new tag to the item

                });
              };
            };

如果你不想发布到ajax,让你的服务器端评估你的输入项,以及任何非id数字的标签,请按照上面的相同想法

I updated your Plunker here