Jquery UI自动完成:从一个数组的多个属性进行搜索

Jquery UI自动完成:从一个数组的多个属性进行搜索,jquery,jquery-ui,jquery-ui-autocomplete,Jquery,Jquery Ui,Jquery Ui Autocomplete,嗨,我正在尝试让jQuery UI自动完成小部件工作,以便它从数组的多个属性(而不仅仅是默认情况下的属性)中搜索匹配项 我已经搞乱了他们的例子,但是我仍然不确定如何解决这个问题 这是我在script var projects = [ { value: "jquery", label: "jQuery", desc: "the write less, do more, JavaScript

嗨,我正在尝试让jQuery UI自动完成小部件工作,以便它从数组的多个属性(而不仅仅是默认情况下的属性)中搜索匹配项

我已经搞乱了他们的例子,但是我仍然不确定如何解决这个问题

这是我在
script

var projects = [
    {
        value: "jquery",
        label: "jQuery",
        desc: "the write less, do more, JavaScript library",
        other: "9834275 9847598023 753425828975340 82974598823"
    },
    {
        value: "jquery-ui",
        label: "jQuery UI",
        desc: "the official user interface library for jQuery",
        other: "98 83475 9358 949078 8 40287089754 345 2345"
    },
    {
        value: "sizzlejs",
        label: "Sizzle JS",
        desc: "a pure-JavaScript CSS selector engine",
        other: "49857 2389442 573489057 89024375 928037890"
    }
我想要的是,如果键入“write”,第一个元素应该在autocomplete中弹出,类似地,如果键入“jq”,前两个元素应该弹出


根据报告:

数组:数组可用于本地数据。支持两种格式:

  • 字符串数组:
    [“Choice1”、“Choice2”]

  • 具有标签和值属性的对象数组:
    [{label:“Choice1”,value:“value1”},…]

标签属性显示在建议菜单中。当用户选择项目时,值将插入到输入元素中。如果只指定了一个属性,则它将同时用于这两个属性,例如,如果仅提供属性,则也将用作标签

如何(硬)编码,使源代码使用2个标签(
label
desc
?),而不是一个标签


(很抱歉,我搜索了许多类似的问题,但是它们都针对多个源,因为我只有一个数组,所以这里没有。是吗?

自动完成接受一个函数,它可以以您认为合适的任何方式提供数据:

第三种变体是回调,它提供了最大的灵活性,并且可以 用于将任何数据源连接到自动完成。回调函数将被调用 两个论点:

  • 一个请求对象,具有一个术语属性,它引用文本输入中当前的值。例如,如果用户输入 “new yo”在城市字段中,自动完成术语将等于“new yo”
  • 响应回调,它需要一个参数:向用户建议的数据。此数据应根据 提供术语,并且可以采用上述任何格式 简单的本地数据。在提供自定义源时,这一点很重要 回调以处理请求期间的错误。你必须随时打电话给警察 响应回调,即使遇到错误。这确保 小部件始终具有正确的状态
这意味着你可以写这样的东西

$( "#project" ).autocomplete({
    source: function (request, response) {
        // request.term is what you typed
        console.log(request.term); 

        //call response with an array containing the filtered data
        response([...]); 
    }
});
您的问题的简单解决方案:

function lightwell(request, response) {
    function hasMatch(s) {
        return s.toLowerCase().indexOf(request.term.toLowerCase())!==-1;
    }
    var i, l, obj, matches = [];

    if (request.term==="") {
        response([]);
        return;
    }

    for  (i = 0, l = projects.length; i<l; i++) {
        obj = projects[i];
        if (hasMatch(obj.label) || hasMatch(obj.desc)) {
            matches.push(obj);
        }
    }
    response(matches);
}

$( "#project").autocomplete({
    source: lightwell
});
功能光井(请求、响应){
函数hasMatch(s){
返回s.toLowerCase().indexOf(request.term.toLowerCase())!=-1;
}
变量i、l、obj、matches=[];
if(request.term==“”){
答复([]);
返回;
}

对于(i=0,l=projects.length;i)对于那些可能需要更多解释的人,基于上述伟大答案的类似且高度评价的答案如下: