我正在寻找一种方法来改变source
的类型。
例如,假设我有以下2个列表,并且取决于具体情况,我希望使用不同的来源进行预先输入。
var list1 = ["this", "is", "first", "list"],
list2 = ["second", "list", "comes", "here"];
$("selector").typeahead({source: list1})
然后,当我做
$("selector").typeahead({source: list2})
并开始在输入框中输入,第一个列表显示在新输入框下面。
我试过
$("selector")
.removeData()
.typeahead({source: list2})
然而,它没有效果。
答案 0 :(得分:24)
您必须更新与指示here关联的数据字段:
$("selector").data('typeahead').source = list2;
答案 1 :(得分:5)
使用Bootstrap-3-Typeahead库时,这些答案都不适用于我。我能够通过销毁已初始化的typeahead并使用新的源重新初始化来更新源:
$(".typeahead").typeahead("destroy");
$(".typeahead").typeahead({ source: result });
答案 2 :(得分:1)
不幸的是,接受的答案对我不起作用。对于较新版本的库,这可能是一个问题。对我来说,数据('typeahead')没有定义 - 而是有数据('ttTypeahead')和数据('ttAttrs')。这些都没有源属性。
经过一些代码阅读后我想出了这个:
$('selector').data('ttTypeahead').dropdown.datasets[0].source = mySourceFunction
它似乎有效。但是,可能存在定义多个数据集的情况。
答案 3 :(得分:0)
我不确定我是否理解您的情况,但是正如您所说的“ 并视情况而定,我想让预录使用其他来源。”您可以将函数用作typeahead
的源而不是数组。像这样:
function typeAheadSourceFunc(inputText) {
if(inputText.length === 1) {
return ['Amsterdam', 'Washington', 'Sydney', 'Beijing', 'Cairo'];
} else {
return ['OtherAmsterdam', 'OtherWashington', 'OtherSydney'];
}
}
$("SOMESELECTORHERE").typeahead({ source: typeAheadSourceFunc });
在本示例中, typeAheadSourceFunc
每次在输入上触发keypressed
并返回不同的源时都会触发。您可能可以在那里处理您的情况。
p.s:我正在使用bootstrap3-typeahead.js v4.0.2