Javascript jquery autocomplete正在呈现未筛选的数据
我正在使用jqueryautocomplete进行自动建议。“建议”下拉列表显示的是整个列表,而不是筛选列表 小提琴- HTMLJavascript jquery autocomplete正在呈现未筛选的数据,javascript,jquery,Javascript,Jquery,我正在使用jqueryautocomplete进行自动建议。“建议”下拉列表显示的是整个列表,而不是筛选列表 小提琴- HTML <input type='text' /> 在我的搜索过程中,我看到过类似的代码在工作,但我不知道为什么这不起作用 如果希望结果按字母顺序排序,则需要对对象进行排序。“自动完成”不会为您这样做 例如 “建议”下拉列表显示的是整个列表,而不是已排序的列表 这里需要的不是排序,而是过滤 在source函数中,需要从json中筛选要使用的值。您也可以在这里进
<input type='text' />
在我的搜索过程中,我看到过类似的代码在工作,但我不知道为什么这不起作用 如果希望结果按字母顺序排序,则需要对对象进行排序。“自动完成”不会为您这样做 例如 “建议”下拉列表显示的是整个列表,而不是已排序的列表 这里需要的不是排序,而是过滤 在
source
函数中,需要从json
中筛选要使用的值。您也可以在这里进行排序、映射等。差不多
response(
json.filter(
function (jsonItem) {
let sanitizedInput = $.ui.autocomplete.escapeRegex(request.term);
return jsonItem.full_name.match(sanitizedInput);
}
)
.map(/* transform to {id, value} or else in here if need be */)
.sort(/* sort data in here if need be */)
)
这使用和。如果还需要排序,请检查的答案给出的提示。将函数传递给它时进行检查以获取完整信息。感谢您的排序,它现在正在工作。但为什么autocomplete没有自动过滤呢?
function compare(a,b) {
if (a.full_name.toLowerCase() < b.full_name.toLowerCase())
return -1;
if (a.full_name.toLowerCase() > b.full_name.toLowerCase())
return 1;
return 0;
}
json.sort(compare);
var json = [{"full_name": "joye dave", "username": "jd"}, {"full_name": "rob", "username": "r"}, {"full_name": "jhon key", "username": "jk"}, {"full_name": "alpacino", "username": "ap"}, {"full_name": "Julia", "username": "Julia"}];
var transformJson = function(json) {
return $.map(json, function(i) {
return {
value: i.full_name,
id: i.username,
}
});
}
function compare(a,b) {
if (a.full_name.toLowerCase() < b.full_name.toLowerCase())
return -1;
if (a.full_name.toLowerCase() > b.full_name.toLowerCase())
return 1;
return 0;
}
json.sort(compare);
$( "input" ).autocomplete({
source: function( request, response ) {
var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );
response(
$.grep(
transformJson(json),
function( item ){
found = matcher.test( item.value );
return found;
}
)
);
}
});
response(
json.filter(
function (jsonItem) {
let sanitizedInput = $.ui.autocomplete.escapeRegex(request.term);
return jsonItem.full_name.match(sanitizedInput);
}
)
.map(/* transform to {id, value} or else in here if need be */)
.sort(/* sort data in here if need be */)
)