我正在使用 Twitter 的 typeahead 插件(typeahead.js 0.11.1 版),结合 ajax 调用,虽然可以正常工作,但当 ajax 返回结果少于限制时(默认限制为 5,我在 typeahead 调用中没有指定),会出现一些奇怪的行为。这是我的设置方式:
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'
]
但是唯一的建议是“添加到g1”,当全部4个都应该显示。如果我继续输入“new to d”,那么“new to drag”的建议就会出现。如果我只输入“new”,那么我会得到5个完整的建议,包括以上大部分内容!
如果我更改var limit = 5;
,那么ajax调用最多只返回5个结果,而且在我输入“new to d”之前根本不会显示建议列表,也就是说“new”不提供建议。这使我想到与typeahead限制相关的ajax结果数量问题。为了测试我的理论,我向json.options数组中添加了5个无意义的项目,以便始终有超过5个结果,并且一切正常 - 只是我不想总是在列表底部拥有无意义的建议。非常感谢任何建议!