You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery Autocomplete返回Label值异常,需改为返回Value值

问题原因

你在$.map回调中返回的对象里,错误地将label赋值为数字类型的data.id[key],而value是文本类型的data.name[key]。jQuery UI Autocomplete默认会把label作为下拉选项的显示内容,这就导致下拉框现在显示的是数字(和你提供的示例图一致),不符合你需要显示文本的需求。

解决方案

需求1:下拉显示文本,选中后输入框填充文本

直接调整label和value的赋值,让两者都指向文本内容:

$(document).ready(function() {
    $('#id_name').autocomplete({            
        source: function(request, response) {
            $.ajax({
                url: "{% url 'proiecte:autocomplete' %}",
                dataType: "json",
                data: {
                    term: request.term
                },
                success: function(data) {
                    response($.map(data.name, function(value, key) {    
                        return {                                
                            label: data.name[key], // 下拉选项显示文本
                            value: data.name[key]  // 选中后输入框填充文本
                        }
                    }));
                }
            });
        },           
    })
});

需求2:下拉显示文本,后台需提交对应ID(输入框仍显示文本)

如果需要在提交表单时传递ID,但输入框保持显示文本,可以通过select事件配合隐藏字段实现:

$(document).ready(function() {
    $('#id_name').autocomplete({            
        source: function(request, response) {
            $.ajax({
                url: "{% url 'proiecte:autocomplete' %}",
                dataType: "json",
                data: {
                    term: request.term
                },
                success: function(data) {
                    response($.map(data.name, function(value, key) {    
                        return {                                
                            label: data.name[key], // 下拉显示文本
                            value: data.id[key],    // 存储对应ID
                            displayText: data.name[key] // 存储文本用于输入框显示
                        }
                    }));
                }
            });
        },
        select: function(event, ui) {
            event.preventDefault(); // 阻止默认填充ID到输入框的行为
            $('#id_name').val(ui.item.displayText); // 输入框显示文本
            $('#hidden_id').val(ui.item.value); // 把ID存入隐藏字段,用于表单提交
        }
    })
});
效果验证

修改后,下拉框会显示你需要的文本内容,选中后输入框也会填充对应的文本;如果用第二种方案,既能满足前端显示需求,又能保证后台获取到正确的ID值。

内容的提问来源于stack exchange,提问作者Kertz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:45:49