我正在尝试制作一个通用功能来启用预先输入的标签查找。在我尝试概括该功能之前,我在这方面取得了一些成功。现在它似乎工作但更新了错误的字段。
我认为创建的线路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>
和
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);
});
}
}
}