How we can get the ID of selected tags using Jquery tagit?

后端 未结 3 988
深忆病人
深忆病人 2020-12-19 14:23

I have a input tag field ,and I want to get the ID of the selected tages So I have try http://jsfiddle.net/u8zj5/19/ But my problem I want to get the id not label or value t

相关标签:
3条回答
  • 2020-12-19 14:47

    I had the same problem, but didn't want to alter the default behavior of the plugin. So, instead, I used the provided hooks to add new behaivior.

    var availableTags = [
        {
            label: "myTag",
            value: "myTag",
            id: 1
        },
        //etc...
    ];
    var assignedTags = [];
    
    
    $('#singleinputfield').tagit( {
                                tagSource: function (request, response) {
                                        //setup the search to search the label
                                        var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
                                        response($.grep(availableTags, function (value) {
                                            return matcher.test(value.label);
                                        }));
                                },
                                beforeTagAdded: function(event, ui){
    //get id for that tag and signal if it was in the tagSource list
                                    var id, result = false;
                                    $.each(availableTags, function(){
                                        if(ui.tagLabel === this.label){
                                            result = true;
                                            id=this.id;
                                            return false;
                                        }
                                    });
                                    if(result){
    //put id in the list of ids we are using
                                        assignedTags.push(id);
                                    }
                                    return result;
                                },
                                afterTagAdded: function(event, ui){
    //replace the values in the single input field with the assigned ids
                                        $('#singleinputfield').val(assignedTags.join(','));
                                },
                                afterTagRemoved: function(event, ui){
                                    $('#singleinputfield').val(assignedTags.join(','));
                                },
                                beforeTagRemoved: function(event, ui){
                                    var id;
    //get the id for the removed tag and signal if it was in the tagSource list
                                    $.each(availableTags, function(){
                                        if(ui.tagLabel === this.label){
                                            result = true;
                                            id = this.id;
                                            return false;
                                        }
                                    });
                                    if(result){
    //remove the unassigned tag's id from our list
                                        assignedTags = $.grep(assignedTags, function(el){
                                            return el != id;
                                        });
                                    }
                                }
                            });
    
    0 讨论(0)
  • 2020-12-19 14:54

    Use some other plugin like Select2. It has actually got support for this.

    0 讨论(0)
  • 2020-12-19 14:56

    I had the same problem and I what did was modify tag-it.js. When you call the function select you need to send the ID through the function _addTag

    self._addTag(ui.item.label, ui.item.value, ui.item.id);
    

    Then youu just need to get the id:

    _addTag: function(label, value, id) {
        ...
        this._addSelect(label, value, id);
        ...
    }
    

    And here append the ID on a hidden Select

    _addSelect: function(label, value, id) {
            var opt = $('<option>').attr({
                'selected':'selected',
                'value':id
            }).text(label);
            this.select.append(opt);
    

    With this you can have, one label for the autocomplete list, one value to show in the tag, and the ID on a hidden select.

    0 讨论(0)
提交回复
热议问题