我正在使用带有ajax调用的twitter typeahead(typeahead.js 0.11.1)插件,但是当ajax结果的数量小于限制时,会给出一些奇怪的行为(默认限制是5,我没有& #9;在预先打电话中指定)。以下是我如何设置它:
var limit = 6;
populate_typeahead = function() {
$('.typeahead').typeahead('destroy');
$('.typeahead').typeahead({
hint: true,
highlight: true,
minLength: 1
},
{
source: ajaxquery,
});
};
var ajaxquery = function(query, syncresults, process) {
return $.ajax({
url: $(this)[0].$el.closest('span.twitter-typeahead').find('input:last').data('mahiFindByPath'),
type: 'get',
data: {search_string: query, limit: limit},
dataType: 'json',
success: function(json) {
return typeof json.options == 'undefined' ? false : process(json.options);
}
});
};
导致我出现此问题的实际示例是键入" new to"在输入框中返回以下json.options:
[
'new to add to g1',
'new to be in grp1 then remove from grp',
'new to drag',
'new to assign'
]
但是,当所有4个应该显示时,出现的唯一建议是添加到g1'的新功能。如果我继续输入新的d'然后是新的拖动'建议出现了。如果我只键入' new'然后我得到了完整的5个建议,包括上面的大部分内容!
如果我更改var limit = 5;
,那么ajax通话只返回最多5个结果,并且建议列表根本没有显示,直到我得到d'即新的'没有提出建议。这让我觉得它与ajax结果的数量小于或等于typeahead限制有关。为了测试我的理论,我将5个无意义的项目推送到json.options数组中,因此总是有超过5个结果并且它们都按预期工作 - 只是我不想在列表底部总是有无意义的建议。任何建议都非常感谢!
答案 0 :(得分:24)
我有类似的问题。它看起来像是Typeahead版本0.11.1中的一个错误。试试这里的解决方案: https://github.com/twitter/typeahead.js/pull/1212 看看是否有效。
具体的变化如下: https://github.com/per-nilsson/typeahead.js/commit/387290b1e70be0052c6dd9be84069f55d54a7ce7
答案 1 :(得分:0)
遵循agustaf的建议。我正在使用 twitter-typeahead-rails gem 。我创建了一个fork并将版本提升到1.0.1,它为我修复了这个错误,可能是相同或相关的。
在我的情况下,我有两个来自远程源的结果,但只有两个用于建议。
我做了拉取请求 - 但不确定它是否会合并。但是对于未来的rails用户可能会看到这个使用我的fork,特别是我所说的分支。
添加到 gemfile
gem 'twitter-typeahead-rails', :git => "git://github.com/pitops/twitter-typeahead-rails.git" , :branch => "bump_version_to_1.0.1"