在renderItem首次尝试更改jQuery自动完成中的响应项时遇到问题
我已经阅读了大量关于使用_renderItem修改自动完成下拉响应的答案,并从中复制了一些代码。但它不起作用,我也不知道为什么 下面的代码是一个简化的概念测试。当输入某些大城市时,我希望更改城市响应(来自geonames.org),并提供该城市的自治区/地区响应。概念测试简单地将“纽约”更改为“纽约州布朗克斯市,纽约州布朗克斯县”,并使用一个文本字符串表示布朗克斯和现有数据元素。这最终会变得更复杂,但我只想先开始基本的工作 Geonames.org在输入前几个字母时提供“纽约”,但没有发生覆盖更改,警报也不会触发。我还得到了Firebug错误-ReferenceError:item未定义}).data(“item.autocomplete”,item)。\u renderItem=虽然我在很多示例中看到.data(“item.autocomplete”,item),但这一个生成了一个错误,当我修改更改时,错误只会更改。有件事我不明白。至少出现两种症状-Firebug not defined错误和if语句未执行 代码如下。什么应该改变在renderItem首次尝试更改jQuery自动完成中的响应项时遇到问题,jquery,autocomplete,Jquery,Autocomplete,我已经阅读了大量关于使用_renderItem修改自动完成下拉响应的答案,并从中复制了一些代码。但它不起作用,我也不知道为什么 下面的代码是一个简化的概念测试。当输入某些大城市时,我希望更改城市响应(来自geonames.org),并提供该城市的自治区/地区响应。概念测试简单地将“纽约”更改为“纽约州布朗克斯市,纽约州布朗克斯县”,并使用一个文本字符串表示布朗克斯和现有数据元素。这最终会变得更复杂,但我只想先开始基本的工作 Geonames.org在输入前几个字母时提供“纽约”,但没有发生覆盖更
$("#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;
}
};
$(“#城市3”).自动完成({
来源:功能(请求、响应){
//有些行省略了
$.ajax(
成功:功能(数据){
响应($.map(data.geonames,函数(项)){
返回{
标签:item.name+(item.adminName2?,“+item.adminName2:”)+(item.adminName1?,“+item.adminName1:”)+,“+item.countryName,
值:item.name+(item.adminName2?,“+item.adminName2:”)+(item.adminName1?,“+item.adminName1:”),
县:item.adminName2
}
}));
}
//有些行省略了
}).data(“item.autocomplete”,item)。\u renderItem=
功能(ul,项目){
//简单测试
如果(项目标签=“纽约”){
警报(“纽约触发”);
var replaceItem=$(“”)
.data(“item.autocomplete”,item)
.append(“+”布朗克斯“+item.label+”布朗克斯县“+item.adminName1+”);
返回替换项。附录(ul);
}否则{
退货项目.标签;
}
};
你能链接到一些答案吗?项不只是一个神奇的词,它是一个变量,需要先定义它,然后才能将它作为参数传递给函数(在本例中,函数是.data(…)
)。一些轻微的谷歌搜索让我相信所讨论的行实际上应该是:}).data(“autocomplete”)。\u renderItem=
,即:覆盖autocomplete
数据中的\u renderItem
函数。请注意,这是一个“私有的”/未记录的方法,因此将来可能会中断。@WillPalmer谢谢。是的,我看过你提到的表单,有时两个表单都在同一个代码块中。这是我不明白的部分。在我的例子中,.data表达式中的一个或两个中的“autocomplete”会导致autocomplete中断。输入任何数量的字符都不会得到任何下拉列表。它确实删除了Firebug错误,但是Autocomplete被破坏,因此不会发生附加。我在谷歌上搜索了“jQuery自动完成renderItem”,读了大概30条条目。.data()中的两种形式都被使用了,原因我不清楚。@Willpamer感谢你让我有了新的想法。我从另一段工作代码开始,它以}).data(“autocomplete”)开头,正如您所指出的。Firebug错误消失了,一些非常简单的测试练习奏效了。我还发现我编写的replaceItem函数就是这样做的。它将整个下拉列表替换为1项-这不是我想要的。因此,我仍然不理解.data()中的条目,但我正在寻找一条更高效的途径。再次感谢。