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

Laravel中jQuery UI Autocomplete报Uncaught TypeError错误求助

问题排查与解决

核心原因

浏览器抛出的Cannot read properties of undefined (reading 'value')错误,本质是后端返回的数据格式不符合jQuery UI Autocomplete的要求。

jQuery UI Autocomplete默认期望接口返回的每个数据条目包含label(下拉菜单显示的文本)和value(选中后填充到输入框的值)字段(至少要有value)。你当前返回的是id和title字段,组件在处理菜单聚焦逻辑时找不到value属性,因此触发报错。

另外你的前端代码还有一个小问题:Select事件名称应该是小写的select,大写的话事件回调不会被触发。

解决方案

方案1:修改后端返回的字段格式

直接在控制器中返回组件需要的字段结构:

public function autoSrchItem(Request $request)
{
   $search = $request->term;
   $result = Item::where('title', 'LIKE', '%'. $search. '%')->get();
   $data = [];
   foreach ($result as $key => $value) {
       // 映射为组件需要的label和value,同时保留id供后续使用
       $data[] = [
           'id' => $value->id,
           'label' => $value->title,
           'value' => $value->title
       ];
   } 
   return response()->json($data);
}

方案2:前端手动转换数据格式(如果不想修改后端)

将source改为函数形式,自行处理后端返回的数据:

<script>
$("#searchName").autocomplete({
    source: function(request, response) {
        $.ajax({
            url: "{{ route('item.autoSrchItem') }}",
            data: { term: request.term },
            success: function(data) {
                // 将后端返回的title映射为label和value
                response($.map(data, function(item) {
                    return {
                        label: item.title,
                        value: item.title,
                        id: item.id
                    };
                }));
            }
        });
    },
    minLength: 2,
    autoFocus: true,
    // 注意这里是小写的select
    select: function(e, ui){
        console.log(ui.item);
    }
});
</script>

验证效果

修改后重新测试,下拉菜单聚焦时不会再抛出错误,同时select事件也能正常触发,打印出选中的条目数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:55:15