JQuery автозаполнение форматирования источника, чтобы разрешить поиск по нескольким значениям - PullRequest
0 голосов
/ 23 ноября 2011

Мне было интересно, как отформатировать источник, чтобы разрешить этот пример:

Я хочу иметь возможность автозаполнения поля либо путем ввода имени, либо ссылки, либо адреса, соответствующего одному объекту

Так что это в основном вопрос форматирования

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 Ответ

1 голос
/ 23 ноября 2011

Возможно, это не так тривиальное решение, но оно работает:

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/

Надеюсь, это поможет.

...