9

我的完整代码在这里:http: //jsfiddle.net/HfNk9/13/

我正在查看这个示例jqueryUi 自动完成 - 自定义数据和显示

让我们假设对象项目不同,它看起来像这样:

project = [
    {
        name: 'bar',
        value: 'foo',
        imgage: 'img.png'
    }
]

如果我设置source = project自动完成是指project.value而不是project.name.
我应该如何改变这种行为?


var autocomplete = function(element, data) {
    var fixtures = [
        {
        avatar: "http://www.placekitten.com/20/20",
        name: 'aaaaaaaaa',
        value: 'bbbbbbbbb'}
    ];

    element.autocomplete({
        minLength: 3,
        source: function(request, response) {
            var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
            response($.grep(fixtures, function(value) {
                return matcher.test(value.name);
            }));
        },
        create: function() {
            console.log(fixtures)
            element.val(fixtures.name);
        },
        focus: function(event, ui) {
            element.val(ui.item.name);
            return false;
        },
        select: function(event, ui) {
            element.val(ui.item.name);
            return false;
        }
    }).data('autocomplete')._renderItem = function(ul, item) {
        return $('<li></li>')
            .data('item.autocomplete', item)
            .append('<a><img src="' + item.avatar + '" />' + item.name + '<br></a>')
            .appendTo(ul);
    };
};

autocomplete($('#auto'));

我的完整代码:http: //jsfiddle.net/HfNk9/13/

4

3 回答 3

12

您需要过滤与默认情况下自动完成小部件搜索不同的属性(正如您已经注意到的那样,name或者value在使用带有对象的源数组时)。

您可以使用函数而不是数组作为源并以这种方式执行您自己的过滤:

element.autocomplete({
    minLength: 3,
    source: function(request, response) {
        var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
        response($.grep(fixtures, function(value) {
            return matcher.test(value.name);
        }));
    },
    create: function() {
        console.log(fixtures)
        element.val(fixtures.name);
    },
    focus: function(event, ui) {
        element.val(ui.item.name);
        return false;
    },
    select: function(event, ui) {
        element.val(ui.item.name);
        return false;
    }
}).data('autocomplete')._renderItem = function(ul, item) {
    return $('<li></li>')
        .data('item.autocomplete', item)
        .append('<a><img src="' + item.avatar + '" />' + item.name + '<br></a>')
        .appendTo(ul);
};

示例:http: //jsfiddle.net/QzJzW/

于 2012-07-06T02:21:22.590 回答
0

您应该使用以下select属性:

$("...").autocomplete({
    source: ...,
    select: function( event, ui ) { //when an item is selected
        //use the ui.item object
        alert(ui.item.name)
        return false;
    }
});
于 2012-07-05T17:22:09.273 回答
0

答案在您链接到的页面的源代码中。如果你想使用的值name代替valuethen 你会做这样的事情:

$( "#input" ).autocomplete({
    minLength: 0,
    source: projects,
    focus: function( event, ui ) {
        $( "#input" ).val( ui.item.value );
        return false;
    },
    select: function( event, ui ) {
        $( "#input" ).val( ui.item.value );
        return false;
    }
})
.data( "autocomplete" )._renderItem = function( ul, item ) {
    return $( "<li></li>" )
        .data( "item.autocomplete", item )
        .append( "<a>" + item.name + "</a>" )
        .appendTo( ul );
};
于 2012-07-05T17:23:56.763 回答