0

在 Jquery 自动完成器中输入内容时,我收到了错误的建议。就像我输入“ja”一样,它应该只显示那些以“ja”开头的值,但它会显示全部。

我想将此自动完成器的值存储到某个隐藏字段,但我无法做到。下面是我生成的 JSON 格式。所以我想将名称显示为标签,并希望将值分配给一些隐藏的字段场地。 [{"id":1,"name":"Java"},{"id":2,"name":"Liferay"},{"id":3,"name":".Net"}

下面是我的代码片段。

$("input#auto").autocomplete({
    source:function( request, response ) {
        $.ajax({
            url: '<portlet:resourceURL />',
            dataType: "json",
            data: {
                featureClass: "P",
                style: "full",
                maxRows: 12,
                name_startsWith: request.term
            },
            success: function(data) {
                response($.map(data, function(item) {
                    return {
                        label: item.name, 
                        value: item.id, 
                    }                      
                }));
            },                                  
        });
    },
    minLength: 2,
    dataType: "json",           
    select: function (event, ui) {  
        $("#skillName").val(ui.item.value);           
    }
});

任何帮助将非常感激。谢谢

4

1 回答 1

1

自动完成代码似乎是正确的。看起来它可能是没有返回您正在寻找的结果的网络服务。

此外,如果您希望将名称显示为标签,则应将“名称”重命名为“标签”,因为这是 jquery 自动完成默认使用的键来显示下拉列表中的项目。

例如:

{"id":1,"name":"Java"},{"id":2,"name":"Liferay"},{"id":3,"name":".Net"}

可能

{"id":1,"label":"Java"},{"id":2,"label":"Liferay"},{"id":3,"label":".Net"}

或者

{"id":1,"name":"Java","label":"Java"},{"id":2,"name":"Liferay","label":"Liferay"},{"id":3,"name":".Net","label":".Net"}

您可以做的另一件事是使用自定义渲染器通过执行以下操作来显示名称中的值:

Input.autocomplete()..data('autocomplete')._renderItem = function (ul, item) {
       return $('<li></li>')
        .data('item.autocomplete', item)
        .append('<a class="ui-corner-all">' + item.name + '</a>')
        .appendTo(ul);
       }
于 2013-06-20T05:09:47.477 回答