Javascript 引导Ajax Typeahead在查询不在displayField中时不显示结果
我在Django应用程序上实现了搜索系统中的页面。我通过AJAX获得与基于查询的搜索结果相匹配的页面,用户可以单击typeahead建议并转到相关页面 但是,如果查询字符串不是displayField(title)的一部分,则建议不会显示,尽管我可以通过搜索机制看到它返回 例如,如果我搜索“motion picture”,我会通过搜索返回一个JSON对象,例如:Javascript 引导Ajax Typeahead在查询不在displayField中时不显示结果,javascript,twitter-bootstrap,twitter-bootstrap-3,typeahead.js,typeahead,Javascript,Twitter Bootstrap,Twitter Bootstrap 3,Typeahead.js,Typeahead,我在Django应用程序上实现了搜索系统中的页面。我通过AJAX获得与基于查询的搜索结果相匹配的页面,用户可以单击typeahead建议并转到相关页面 但是,如果查询字符串不是displayField(title)的一部分,则建议不会显示,尽管我可以通过搜索机制看到它返回 例如,如果我搜索“motion picture”,我会通过搜索返回一个JSON对象,例如: { title: "Movies", url: "/movies/", description: "Fi
{
title: "Movies",
url: "/movies/",
description: "Find a motion picture in your area"
}
当在description属性中找到匹配项时,我仍然希望向用户显示结果,但Typeahead仅在有匹配提示时才会显示
如果查询不在displayField中,如何显示搜索结果
注意:我正在使用带Bv3的typeahead引导
$(document).ready(function ($) {
var JSONSearchURL = "/search/";
var searchBox = $('#search-form');
searchBox.typeahead({
onSelect: function (item) {
window.location = item.value;
},
ajax: {
url: JSONSearchURL,
timeout: 800,
displayField: "title",
valueField: "url",
method: "get",
dataType: "JSON",
preDispatch: function (query) {
return {
q: query
}
},
preProcess: function (data) {
return data;
}
}
});
});
默认情况下,
bootstrap ajax-typeahead
使用displayField
搜索匹配项。如果要覆盖此行为并搜索其他字段,则需要覆盖grepper
事件。类似的方法应该可以工作(未经测试):
请参见此处的
grepper的默认实现:默认情况下,bootstrap ajax-typeahead
使用displayField
搜索匹配项。如果要覆盖此行为并搜索其他字段,则需要覆盖grepper
事件。类似的方法应该可以工作(未经测试):
请参见grepper的默认实现:谢谢!由于显示的所有结果都是通过后端搜索进行匹配的,因此我使用matcher
方法进行了类似的修复,使其始终返回true
。谢谢!由于显示的所有结果都是通过后端搜索进行匹配的,因此我使用matcher
方法进行了类似的修复,使其始终返回true
。
grepper: function(data){
var that = this;
if(data && data.length){
items = $.grep(data, function(item){
return that.matcher(item['description']);
});
return items;
}
return null;
}