jQuery-UI自动完成,数据源没有标签或值属性

时间:2014-01-09 20:09:55

标签: jquery jquery-ui autocomplete

我有一系列对象:

var people = [
    { name: "John", number: "256", date: "04/08/2013" },
    { name: "Bill", number: "311", date: "04/07/2013" },
    { name: "Mike", number: "127", date: "04/02/2013" }
];

我想将jQuery-UI自动完成功能添加到以下input元素:

<input type="text" id="person-search" />

它接线如下:

$('#person-search').autocomplete({
    source: people
});

自动完成小部件的jQuery-UI文档声明我必须在数组中的每个对象上都有标签和值属性。我真的不想回去添加这些额外的属性。我不相信我也应该这样做。

为了满足jQuery-UI,必须改变我的数据源似乎是浪费和错误。

有没有一种方法可以告诉jQuery-UI自动完成在搜索属性namenumber时过滤而不向对象添加属性? (这些对象在别处使用,可能是数千个元素的数组)

我注意到为source选项提供函数的选项,但是基本上不会跳过jQuery-UI自动完成中的缓存和内置优化过滤? jQuery UI自动完成甚至有这些东西,还是那个神话?在那一点似乎,我可能只是重新发明轮子。

应该有一种简单的方法告诉它使用不同的属性名称。我忽略了什么吗?我是唯一一个对这个看似显而易见的功能感到沮丧的人吗?

1 个答案:

答案 0 :(得分:2)

当然可以。您可以使用jQuery map将起始项数组或对象转换为新的项数组,而不是使用grep应用输入过滤器。

当前过滤器存储在requestsource函数参数中。

价:

  

将数组或对象中的所有项目转换为新的项目数组。

  

查找满足过滤函数的数组元素。该   原始数组不受影响。

代码:

$('#personsearch').autocomplete({
    source: function (request, response) {
        var re = $.ui.autocomplete.escapeRegex(request.term);
        var matcher = new RegExp("^" + re, "i");
        response($.grep(($.map(people, function (v, i) {

            return {
                label: v.name,
                value: v.name
            };
        })), function (item) {
            return matcher.test(item.value);
        }))

    }
});

演示:http://jsfiddle.net/IrvinDominin/RKq5n/1/