Jquery自动完成格式化源以允许按多个值进行搜索

时间:2011-11-23 17:13:50

标签: jquery jquery-autocomplete

我想知道如何格式化源代码以允许这个例子:

我希望能够通过输入与单个对象匹配的名称,参考或地址来自动填充字段

所以这主要是格式化问题

id  1 = { name = "test", ref = "1337", address = "123 street" }
    2 = { name = "john", ref = "2", address = "oxford street" }

这是我到目前为止所做的,但它不起作用。我知道我错过了一些非常明显的东西。

     var autocompleteFields = new Array();

     for (var i in db._data.installations)
     {
         smallArray = [db._data.installations[i].name, db._data.installations[i].reference, db._data.installations[i].address];
         autocompleteFields.push(smallArray);  
     }

      $("#input_search_installation_autocomplete").autocomplete({
            source: autocompleteFields
      });  

}); 

感谢。

1 个答案:

答案 0 :(得分:1)

也许这不是那么简单的解决方案,但它有效:

var data = [
    { id: 1, name: "test", ref: "1337", address: "123 street" },
    { id: 2, name: "john", ref: "2", address: "oxford street" }
];

$("#input_search_installation_autocomplete").autocomplete({
        minLength: 1,
        //define callback to format results  
        source: function (req, add) {
            add(getSourceData(req));
        },
}).data("autocomplete")._renderItem = (function (ul, item) {

        if (item == undefined) return;

        var label = '<span>' + item.name + " " + item.address + '</span>';

        return $("<li></li>").data("item.autocomplete", item).append(label).appendTo(ul);
});

function getSourceData(req) {
    var source = new Array();
    var query = req.term;

    for(var i = 0; i < data.length; i++) {
        var entry = data[i];            
        if (entry.name.indexOf(query) > -1 || entry.ref.indexOf(query) > -1 || entry.address.indexOf(query) > -1) {
            source.push(entry);
        }
    }
    return source;
}

代码:http://jsfiddle.net/2AUN8/6/

希望它有所帮助。