Javascript Tagsmanager.js 3.0,tritter typeahead更新错误字段

Javascript Tagsmanager.js 3.0,tritter typeahead更新错误字段,javascript,jquery,javascript-events,twitter-typeahead,Javascript,Jquery,Javascript Events,Twitter Typeahead,我正在尝试创建一个通用函数来启用typeahead标记查找。在我尝试推广函数之前,我在这方面取得了一些成功。现在它似乎可以工作,但更新了错误的字段 我认为,创建var tmApi的行并没有将其保持在本地。或者至少回调正在访问错误的变量。你知道如何让回调函数引用本地回调函数吗 谢谢 <div class="tag-container" id="skills-container"></div> <input class="form-control" id="skills

我正在尝试创建一个通用函数来启用typeahead标记查找。在我尝试推广函数之前,我在这方面取得了一些成功。现在它似乎可以工作,但更新了错误的字段

我认为,创建
var tmApi
的行并没有将其保持在本地。或者至少回调正在访问错误的变量。你知道如何让回调函数引用本地回调函数吗

谢谢

<div class="tag-container" id="skills-container"></div>
<input class="form-control" id="skills-add" type="text" 
data-tag="skills" data-prefill="${traveler.skills}" data-tagfile="/inc/ajax/skills.json">
<input type="hidden" id="skills" name="skills">

<script>setupTags();</script>

setupTags();

函数setupTags(){
变量字段=$('INPUT[type=“text”]”);

对于(var i=0;i,通过在闭包中包装来解决它

function setupTags(){

    var fields = $('INPUT[type="text"]');
    for (var i=0; i<fields.length; i++){

        if (fields[i].getAttribute("data-tag")){
            var tag     = fields[i].getAttribute("data-tag");
            var prefill = fields[i].getAttribute("data-prefill");
            var tagfile = fields[i].getAttribute("data-tagfile");

            console.log(tag);

            var tmApi = $('#'+tag+'-add').tagsManager({
                backspace: [],
                tagsContainer: '#'+tag+'-container',
                delimiters: [9, 13, 44], // tab, enter, comma
                prefilled: prefill,
                output: '#'+tag
            });

            console.log(tmApi);

            var tagsdb = new Bloodhound({
                  datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.name); },
                  queryTokenizer: Bloodhound.tokenizers.whitespace,
                  prefetch: {
                    url: tagfile,
                    cacheKey: tag,
                    ttl: 600000, //10 min
                    filter: function(list) {
                        return $.map(list, function(tag) { return { name: tag }; });
                    }
                  }
            });
            tagsdb.initialize();

            $('#'+tag+'-add').typeahead(null, {
                name: tag,
                displayKey: 'name',
                source: tagsdb.ttAdapter()
            }).on('typeahead:selected', function (e, d, s) {
                tmApi.tagsManager("pushTag", d.name);
            });

        }
    }
}