2012-11-26 33 views
12

我正在寻找一种方法来更改source以进行打字。bootstrap typeahead - 正在更改源

例如,假设我有以下2个列表,并且取决于案例,我希望使用不同来源的typeahead工作。

var list1 = ["this", "is", "first", "list"], 
    list2 = ["second", "list", "comes", "here"]; 

$("selector").typeahead({source: list1}) 

然后,当我做

$("selector").typeahead({source: list2}) 

,并开始输入到输入框,第一个列表中出现的新的下面。

我试着做

$("selector") 
    .removeData() 
    .typeahead({source: list2}) 

然而,它没有任何效果。

+1

可能重复://计算器.com/questions/13516396/how-to-update-the-source-option-in-bootstrap-typeahead-js) –

回答

22

必须更新指示here相关的数据字段:

$("selector").data('typeahead').source = list2; 
+0

这是正确的,刚刚在https://github.com/twitter/bootstrap/issues/发现了这个问题。 1997#issuecomment-4011687 –

+0

是的,这是我发现:) –

+10

我越来越无法设置属性“源”的未定义 –

1

不幸的是,公认的答案并没有为我工作。这可能是库的较新版本的问题。对我而言,数据('typeahead')没有被定义 - 而是有数据('ttTypeahead')和数据('ttAttrs')。这两个都没有源属性。

一些代码的阅读后,我想出了这个: $('selector').data('ttTypeahead').dropdown.datasets[0].source = mySourceFunction

它似乎工作。不过,可能会出现定义了多个数据集的情况。

+1

这Twitter的预输入不起作用相同的链接0.11.1 – user1279887

5

使用Bootstrap-3-Typeahead库时这些答案都不适用于我。我能更新源被破坏初始化预输入,并重新用新源初始化它:

$(".typeahead").typeahead("destroy"); 
    $(".typeahead").typeahead({ source: result }); 
[如何更新源选项引导-typeahead.js(HTTP的
+0

不幸的是,这也具有破坏事件的效果n该元素... – skirato

+0

对,您需要将它们与源代码一起应用 –

+0

请确保手动取消绑定您正在使用的任何事件处理程序(例如, 'typeahead:close')当你调用'destroy'方法。此方法不会解除这些处理程序的绑定,因此每次您销毁和重建时都会继续附加和降低性能。 – Joel