Javascript 如何在jQuery UI自动完成中实现我自己的过滤结果规则
这是我的代码:Javascript 如何在jQuery UI自动完成中实现我自己的过滤结果规则,javascript,jquery,autocomplete,Javascript,Jquery,Autocomplete,这是我的代码: var projects = [{label:"PH2938", value: "1", fk: "3", desc: "hello"}, {label:"JUH28", value: "2", fk: "0", desc: "world"},]; {label:"HK383", value: "3", fk: "3", desc: "!"},]; $( "#serial_no" ).au
var projects = [{label:"PH2938", value: "1", fk: "3", desc: "hello"},
{label:"JUH28", value: "2", fk: "0", desc: "world"},];
{label:"HK383", value: "3", fk: "3", desc: "!"},];
$( "#serial_no" ).autocomplete({
minLength: 0,
source: function(request, response) {
var results = $.ui.autocomplete.filter(projects, request.term);
response(results);
},
focus: function( event, ui ) {
$( "#serial_no" ).val( ui.item.label );
return false;
},
select: function( event, ui ) {
$( "#serial_no" ).val( ui.item.label );
$( "#device_id" ).val( ui.item.value );
$( "#device_model" ).text( ui.item.desc );
return false;
}
})
.data( "ui-autocomplete" )._renderItem = function( ul, item ) {
return $( "<li>" )
.append( "<a>" + item.label + "</a>" )
.appendTo( ul );
};
var项目=[{label:“PH2938”,value:“1”,fk:“3”,desc:“hello”},
{标签:“JUH28”,值:“2”,fk:“0”,描述:“世界”},];
{标签:“HK383”,值:“3”,fk:“3”,描述:!”},];
$(“#序列号”)。自动完成({
最小长度:0,
来源:功能(请求、响应){
var results=$.ui.autocomplete.filter(projects、request.term);
答复(结果);
},
焦点:功能(事件、用户界面){
$(“#序列号”).val(ui.item.label);
返回false;
},
选择:功能(事件、用户界面){
$(“#序列号”).val(ui.item.label);
$(“#设备id”).val(ui.item.value);
$(“#设备#型号”).text(ui.item.desc);
返回false;
}
})
.data(“ui自动完成”)。\u renderItem=功能(ul,项目){
返回$(“”)
.append(“+item.label+”)
.附录(ul);
};
因此,现在,例如,如果我在字段中键入“H”,所有3个结果(即PH2938、JUH28、HK383)都将显示。我的问题是:是否可以只显示fk=3的结果(即PH2938,HK383)。也就是说,我可以实现我自己的规则来显示哪些结果 如果我理解正确,您需要根据一些标准筛选
项目。在这种情况下,fk
等于'3'
由于您已经在使用jQuery,因此它是筛选任务的最佳候选
$.grep(projects, function (project) {
return project.fk === '3';
});
现在我们必须决定在何处执行此过滤
如果您想摆脱那些满足fk
标准的项目,而不考虑自动完成输入中使用的术语,我会在原始projects
数组中执行:
var projects = [{label:"PH2938", value: "1", fk: "3", desc: "hello"},
{label:"JUH28", value: "2", fk: "0", desc: "world"},];
{label:"HK383", value: "3", fk: "3", desc: "!"},];
projects = $.grep(projects, function (project) {
return project.fk === '3';
});
如果您需要更灵活的方式,允许您根据其他条件提供不同的数据源,而不仅仅是标签的文本匹配,那么您可以在源属性中执行此筛选:
source: function(request, response) {
var results = $.ui.autocomplete.filter(projects, request.term);
// Filter the matched results by project fk 3.
results = $.grep(results, function (project) {
return project.fk === '3';
});
response(results);
},
也可以在匹配之前执行过滤:
source: function(request, response) {
// Filter the matched projects by project fk 3.
var filteredProjects = $.grep(projects, function (project) {
return project.fk === '3';
});
var results = $.ui.autocomplete.filter(filteredProjects, request.term);
response(results);
},
后者见a