bootstrap typeahead - 改变来源

时间:2012-11-26 10:30:50

标签: jquery twitter-bootstrap bootstrap-typeahead

我正在寻找一种方法来改变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})

然而,它没有效果。

4 个答案:

答案 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