我已经阅读了一堆关于使用 _renderItem 修改自动完成下拉响应的 SO 答案,并从中复制了一些代码。但它不起作用,我不知道为什么。
下面的代码是一个简化的概念测试。当输入某些大城市时,我想更改城市响应(来自 geonames.org)并提供该城市的行政区/区域的响应。概念测试只是将“New York”更改为“Bronx, New York, Bronx County, New York”,并带有用于 Bronx 和现有数据元素的文本字符串。这最终会变得更加复杂,但我只想先了解基础知识。
Geonames.org 在输入前几个字母时会提供“纽约”,但不会发生覆盖更改,并且不会触发警报。我也收到 Firebug 错误 - ReferenceError: item is not defined }).data("item.autocomplete", item)._renderItem= 虽然我在很多示例中看到 .data("item.autocomplete", item),但这个产生一个错误,当我修改更改时,错误只会改变。这里有些东西我不明白。至少出现 2 个症状 - Firebug 未定义错误,以及 if 语句未执行的事实。
代码如下。应该改变什么?
$("#city3").autocomplete({
source: function (request, response){
//some lines omitted
$.ajax(
success: function (data){
response( $.map(data.geonames, function (item){
return {
label: item.name + (item.adminName2 ? ", " + item.adminName2 : "") + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
value: item.name + (item.adminName2 ? ", " + item.adminName2 : "") + (item.adminName1 ? ", " + item.adminName1 : ""),
county: item.adminName2
}
}));
}
//some lines omitted
}).data("item.autocomplete", item)._renderItem=
function(ul,item){
//simple test
if(item.label=="New York"){
alert("NYC triggered");
var replaceItem = $("<li></li>")
.data("item.autocomplete", item)
.append("<a>"+"Bronx"+item.label+"Bronx County"+item.adminName1+"</a>");
return replaceItem.appendTo(ul);
}else{
return item.label;
}
};