14

我正在寻找一种改变sourcetypeahed 的方法。

例如,假设我有以下 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})

然而,它没有任何效果。

4

4 回答 4

26

您必须更新关联的数据字段,如下所示

$("selector").data('typeahead').source = list2;
于 2012-11-26T10:42:00.100 回答
4

使用Bootstrap-3-Typeahead库时,这些答案都不适合我。我能够通过销毁已初始化的预先输入并使用新源重新初始化它来更新源:

    $(".typeahead").typeahead("destroy");
    $(".typeahead").typeahead({ source: result });
于 2015-04-15T23:59:37.363 回答
1

不幸的是,接受的答案对我不起作用。这可能是较新版本的库的问题。对我来说,data('typeahead') 没有定义——取而代之的是 data('ttTypeahead') 和 data('ttAttrs')。这些都没有源属性。

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

它似乎有效。但是,可能存在定义多个数据集的情况。

于 2014-09-25T09:31:14.957 回答
1

我不确定我是否正确理解您的情况,但正如您所说“并视情况而定,我想让 typeahead 使用不同的源。”,我认为您可以使用函数作为源来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触发输入时都会触发并返回不同的源。你可能可以在那里处理你的情况。

ps:我正在使用bootstrap3-typeahead.js v4.0.2

于 2020-09-19T20:07:33.860 回答