Javascript 如何在显示前过滤自动完成中的结果?
我正在使用jQueryUIAutoComplete从服务器检索一些结果。我想根据客户端函数在客户端过滤结果。我该怎么做 以下是我想要的伪代码:Javascript 如何在显示前过滤自动完成中的结果?,javascript,arrays,filtering,jquery-ui-autocomplete,Javascript,Arrays,Filtering,Jquery Ui Autocomplete,我正在使用jQueryUIAutoComplete从服务器检索一些结果。我想根据客户端函数在客户端过滤结果。我该怎么做 以下是我想要的伪代码: function is_valid_value(item) { // returns true if item is valid, false otherwise } $( "#some-text-field" ).autocomplete({ source: $.get('url/path/to/autocomplete.json?t
function is_valid_value(item) {
// returns true if item is valid, false otherwise
}
$( "#some-text-field" ).autocomplete({
source: $.get('url/path/to/autocomplete.json?term=abc', function(data) {
// item is an element in the data collection
return data.filter(item) {
return is_valid_value(item);
}
})
}
我知道这在多个级别上都不起作用-我没有要传递的实际术语,而且我还得到一个语法错误-行
返回数据.filter(item)上出现意外标记{
{
。我还研究了ajaxSuccess
,它似乎主要用于提醒用户成功完成-我不知道它是否可以用于筛选数据并返回数据。我使用了另一种解决方案,它向服务器发送了足够的数据,以便在服务器上进行筛选:
$("#some-text-field").autocomplete({
source: function(request, response) {
$.ajax({
url: '/path/to/autocomplete',
dataType: "json",
data: {
term: request.term,
blocked: blocked_results(), //a function that returns the results to block
},
success: function(data) {
response(data);
}
})
});
然后,服务器只发回有效的结果,因此不需要对客户端进行筛选。我使用了另一种解决方案,该解决方案将足够的数据发送到服务器,以便在服务器上进行筛选:
$("#some-text-field").autocomplete({
source: function(request, response) {
$.ajax({
url: '/path/to/autocomplete',
dataType: "json",
data: {
term: request.term,
blocked: blocked_results(), //a function that returns the results to block
},
success: function(data) {
response(data);
}
})
});
然后,服务器只发回有效的结果,因此不需要对客户端进行过滤。在jQueryUIAPI中可以找到:
$(“#autocomplete”).autocomplete({source:function(request,response){var matcher=newregexp(“^”+$.ui.autocomplete.escapeRegex(request.term),“i”);response($.grep(标记,函数(项){return matcher.test(项);}}}}}})
在jQueryUIAPI中可以找到:$(“#自动完成”).autocomplete({source:function(request,response){var matcher=new RegExp(“^”+$.ui.autocomplete.escapeRegex(request.term),“i”);response($.grep(标记,函数(项){return matcher.test(项);});}});