如何从jQuery autocomplete返回值中获取city、speed等字段?
解决jQuery Autocomplete获取city、speed字段的问题
先明确你调用
console.log(ui.item.speed)的回调场景:
jQuery Autocomplete的不同回调函数中,ui对象的结构存在差异:select事件里,ui.item必然包含选中的完整数据对象,所以能正常读取city、speed;- 但在
focus、change或source回调中,ui.item可能未定义:比如focus时未选中有效项、change时输入内容与选项不匹配,都会导致ui.item为undefined。
分场景处理方案:
- focus事件中获取:
先判断ui.item是否存在,再读取字段:focus: function(event, ui) { if (ui.item) { console.log(ui.item.city, ui.item.speed); } } - source回调中获取:
source的核心参数是request和response,返回数据时可直接访问字段:source: function(request, response) { $.ajax({ url: "你的接口地址", data: request, success: function(data) { response($.map(data, function(item) { // 直接从返回的item中读取字段 console.log(item.city, item.speed); return { label: item.label, value: item.value, city: item.city, speed: item.speed }; })); } }); } - change事件中获取:
必须先验证ui.item的有效性,因为用户可能输入非选项内容:change: function(event, ui) { if (ui.item) { console.log(ui.item.city, ui.item.speed); } else { // 处理输入内容不匹配选项的情况 console.log("未选中有效选项"); } }
- focus事件中获取:
关键验证点:
确保Autocomplete的source返回的每个选项对象,都包含city、speed字段——如果返回数据里没有这些字段,即便ui.item存在,也无法读取到对应值。
内容的提问来源于stack exchange,提问作者Casey Davis
相关产品推荐
相关产品推荐

