jQuery计数/长度Typeahead远程

时间:2017-08-25 18:07:19

标签: javascript jquery count twitter-typeahead bloodhound

我有一个文本框,我通过Twitter Typeahead使用自动完成功能,特别是远程示例。

这是我的代码:

var states = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('state'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: {
        url: getStateUrl + "?query=%QUERY",
        wildcard: '%QUERY'
    }
});

var sLength = states.length; // this comes back as undefined

$('#StateName').typeahead({
    highlight: true
}, {
    name: 'states',
    display: 'state',
    source: states,
    limit: 10
}).bind('typeahead:select', function(ev, suggestion) {
    $("#StateId").val(suggestion.id);
});

如果您在我的代码中没有看到评论,states.length将返回undefined。我已经尝试了states.index.datums.length,但这也是undefined

如何使用远程twitter预先输入lengthcount states

2 个答案:

答案 0 :(得分:1)

这是因为我猜你的state.length是在API调用之前执行的。从来没有实施过猎犬!只是猜测因为它发生在jQuery ajax请求中,我们将不得不处理回调函数中的输出数据,当它被访问时它返回undefined。

答案 1 :(得分:1)

正如@ Sai-nihar-nightraiser所说,你试图在收集结果之前设定结果的长度。 试试这样:

var sLength;

var states = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('state'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
    url: getStateUrl + "?query=%QUERY",
    wildcard: '%QUERY',
    filter: function (statesResults){
        window.sLength = statesResults.length;
        return statesResults;
  }
});

sLength应该等于运行typeahead后返回的状态数。 我从这篇文章得到的信息: Typeahead.js - Show that there are more results