Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在jQuery UI自动完成中实现我自己的过滤结果规则_Javascript_Jquery_Autocomplete - Fatal编程技术网

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