Azu*_*ure 0 javascript jquery jquery-ui jquery-autocomplete
我正在使用 Jquery UI 的自动完成功能。
我遇到的问题是:当我使用外部数据源时,标签和值都表现得像值。
换句话说,当我使用单个标签和值对引用外部数据源时,标签和值作为两个选项一起出现在下拉列表中。
换句话说,它们都显示为值,而不是显示为标签和值。
当您单击其中任何一个时,警报 alert(ui.item.label); 显示其值,无论是标签还是值。
我不明白为什么标签和值都表现得像值,特别是因为我已经在 json 源代码中清楚地标记了它。
该问题不会发生在本地数据源上,而只会发生在外部数据源上。
这是本地代码:
<script>
    $(document).ready(function() {
        $("#inputbox").autocomplete({
            source: "sd/aa.php",
            minLength: 3,
            select: function(event, ui) {
                alert(ui.item.label);
                alert(ui.item.value);
            }
        });
    });
</script>
<input id="inputbox" />
Run Code Online (Sandbox Code Playgroud)
    当使用jQuery Autocomplete 时,它需要使用复杂对象时标签和值的特定属性。
例如,一个具有自定义属性的对象,我们会说Id和Description,自动完成将查找标签和值属性。如果您只定义了一个标签 OR 值属性,它将为显示的标签和值使用该属性。
外部服务应该返回一个如下所示的对象:
[{
    //Your custom properties
    id: 78923,
    description: 'A very nice widget',
    //Below are autocomplete specific properties
    label: 'Nice Widget A',
    value: '$19.99'
}]
Run Code Online (Sandbox Code Playgroud)
使其工作的第一种方法是调整您的服务以向返回给客户端的 json添加 标签和值属性。
第二种方法,如果您无法控制服务,则改为进行 AJAX 调用,并且在成功事件函数中,您可以手动映射结果并使用新属性扩展对象。
...
source: function (request, response) {
    $.ajax({
        url: "/my/service?term=" + escape(request.term),
        type: "GET",
        contentType: "application/json",
        dataType: "json",
        success: function (data) {
            var mappedResults = $.map(data, function (item) {
                //Extend the service data with a label and value property that autocomplete uses
                return $.extend(item, { label: item.description, value: item.id });
            });
            response(mappedResults);
        }
    });
}
...
Run Code Online (Sandbox Code Playgroud)
如果您希望将服务提供的其他值用于其他用途,这也很有用。这些可以通过自动完成功能的任何事件以ui.item.[yourProperty]. 因此,如果我select对Autocomplete小部件的事件进行回调,则可以通过ui.item.description.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1173 次  |  
        
|   最近记录:  |