我已经修改了 bootstrap typeahead 以在选择 typeahead 元素时将 id 与元素相关联。
function addTypeahead(element)
{
var labels, mapped;
var myElement = $(element);
console.log(myElement);
myElement.typeahead({
source: function (query, process){
$.post('/edit/unassigned_list', {q: query}, function(data){
labels = [];
mapped = {};
//console.log(data);
$.each(data, function(i, item){
var query_label = item.name;
mapped[query_label] = item;
labels.push(query_label);
});
process(labels);
}, "JSON");
},
updater: function (query_label){
var item = mapped[query_label];
myElement.attr('person_id', item.id);
return query_label;
}
});
}
这很好用。但是,当我尝试将其设置为跨多个元素工作时,我最终会在第一个元素上遇到问题(我认为是因为我不小心让它泄漏到了全局范围内,或者我做了一些可怕的错误)。我给你举个例子
我有多个标记为 #project-auto-* 的项目元素,我在我的文档(就绪)部分运行以下代码:
$("[id^=project-auto-]").each(function(index, element){
var local = $(element);
addTypeahead(element);
});
如果我只是遍历并控制台记录它们都显示的每个元素。但是,如果我尝试对其中任何一个应用预输入,则只有第一个具有预输入(并且它可以正常工作),但循环在第一个应用程序后终止。我一直在摸索和玩弄不同的范围(这就是为什么所有范围嵌套)都无济于事。我是否做了一些我完全错过的超级愚蠢的事情?