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

jQuery Autocomplete中select事件获取KeyID显示undefined问题

解决jQuery UI Autocomplete select事件无法获取KeyID的问题

看起来你遇到的是jQuery UI Autocomplete中select事件无法读取自定义属性的典型问题,核心原因出在source回调里的$.map数据映射环节:

问题根源

你在success回调里的alert能拿到item.KeyID,说明后端返回的原始数据是包含这个字段的,但如果你的$.map只返回了Autocomplete默认需要的label或value(甚至直接返回字符串),那么最终传递给select事件的ui.item就会丢失KeyID这个自定义属性,导致读取时显示undefined。

修复方案

修改$.map的返回值,把KeyID也包含到返回的对象中,确保Autocomplete能把这个属性传递到select事件里:

$(document).ready(function () {
    $('#Company').autocomplete({
        source: function (request, response) {
            $.ajax({
                url: '@Url.Action("AutoCompleteCompany", "Main")',
                type: "POST",
                dataType: "json",
                data: { term: request.term },
                success: function (data) {
                    response($.map(data, function (item) {
                        // 这里的alert能验证KeyID存在,可保留测试或删除
                        // alert('Key ' + item.KeyID);
                        // 返回包含所有需要属性的对象
                        return {
                            label: item.CompanyName, // 替换成你实际要显示的文本字段
                            value: item.CompanyName, // 替换成你希望输入框显示的内容
                            KeyID: item.KeyID // 关键:把KeyID加入返回对象
                        };
                    }));
                }
            });
        },
        select: function (event, ui) {
            // 现在就能正常获取KeyID了
            var selectedKeyID = ui.item.KeyID;
            console.log('选中的KeyID:', selectedKeyID);
            
            // 可选:阻止默认行为,避免输入框被自动填充为value(如果需要自定义显示)
            // event.preventDefault();
            // $('#Company').val(ui.item.label);
        }
    });
});

额外说明

如果之前你的$.map是直接返回字符串(比如return item.CompanyName),那ui.item就只是一个字符串,自然没有KeyID属性。必须返回包含label、value以及自定义属性的对象,才能在select事件中访问到这些额外数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:45:06