当使用带有remote选项的Type预报/血犬时,当本地/预取结果在“限制”(5)下时,所显示的建议与输入无关。看起来就像它只是显示从顶部的结果设置为5。
照片:“爱”是预期的结果,其他一切都是无关的:

我的代码:
var keywords = [
{"value": "Ambient"}, {"value": "Blues"},{"value": "Cinematic"},{"value": "Classical"},{"value": "Country"},
{"value": "Electronic"},{"value": "Holiday"},{"value": "Jazz"},{"value": "Lounge"},{"value": "Folk"},
{"value": "Hip Hop"},{"value": "Indie"},{"value": "Pop"},{"value": "Post Rock"},{"value": "Rock"},{"value": "Singer-Songwriter"},{"value": "Soul"},
{"value": "World"},{"value": "Happy"},{"value": "Sad"},{"value": "Love"},{"value": "Angry"},
{"value":"Joy"},{"value": "Delight"},{"value": "Light"},{"value": "Dark"},{"value": "Religious"},{"value": "Driving"},
{"value":"Excited"},{"value": "Yummy"},{"value": "Delicious"},{"value": "Fun"},{"value": "Rage"},
{"value":"Hard"},{"value": "Soft"}
];
// Instantiate the Bloodhound suggestion engine
var keywordsEngine = new Bloodhound({
datumTokenizer: function (datum) {
return Bloodhound.tokenizers.whitespace(datum.value);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
local: keywords,
remote: {
url: '/stub/keywords.json',
filter: function (keywords) {
// Map the remote source JSON array to a JavaScript object array
return $.map(keywords, function (keyword) {
return {
value: keyword.value
};
});
}
},
prefetch: {
url: '/stub/keywords.json',
filter: function (keywords) {
// Map the remote source JSON array to a JavaScript object array
return $.map(keywords, function (keyword) {
return {
value: keyword.value
};
});
}
}
});
// kicks off the loading/processing of `local` and `prefetch`
keywordsEngine.initialize();
$('#keyword-search-input').typeahead({
hint: true,
highlight: true,
minLength: 1
},
{
name: 'keyword',
displayKey: 'value',
// `ttAdapter` wraps the suggestion engine in an adapter that
// is compatible with the typeahead jQuery plugin
source: keywordsEngine.ttAdapter()
});发布于 2015-02-03 16:38:06
经过进一步的研究,我认为我需要手动过滤远程建议,根据这个关于Typeahead.js的Github问题的帖子:
“所以我的想法是,遥控器返回的数据应该已经被遥控器过滤了,所以不再对其进行进一步的过滤。”
发布于 2015-04-24 04:21:19
我希望更深入地探讨这个问题,供今后参考。请记住,我不是JavaScript专家,也不是这方面的任何专家。对于Bloodhound引擎,它不允许与remote url的搜索参数进行持续的动态交互。正因为如此,如果您使用的是某个json文件,“提前输入”搜索框将只显示limit。因此,如果是limit: 10,那么将显示json数据的前10条记录,尽管用户输入,结果不会改变。只有json的第一条记录才有基于用户提示的建议,这是微不足道的。
但是,如果remote源有一个获取所需结果as in this example的query(例如fire查询),那么每次填充搜索框时,搜索框中都会填充相关的结果。
那么,如果您有一个大的json文件,它是从某个数据库生成的,而不是使用prefecth呢?显然,为了速度和效率,您需要使用remote。使用php脚本,您需要执行如下操作:
$key=$_GET['key'];
$con=mysqli_connect("localhost","root","");
$db=mysqli_select_db($con, "database_name");
$query=mysqli_query($con, "SELECT * FROM table WHERE column LIKE '%{$key}%'");
$rows=array();
while($row=mysqli_fetch_assoc($query))
{
$rows[] = $row;
}
echo json_encode($rows); 在这里,您使用GET获取搜索参数的值,并且您已经与数据库建立了连接,因此您的搜索池将始终在用户提示下使用“相关结果”进行补充。
https://stackoverflow.com/questions/28222914
复制相似问题