_renderItemを使用してオートコンプリートドロップダウン応答を変更することについてのSOの回答をたくさん読んだので、それらからいくつかのコードをコピーしました。しかし、それは機能せず、理由がわかりません。
以下のコードは、簡略化された概念テストです。特定の大都市に入るとき、(geonames.orgからの)都市の応答を変更し、その都市の自治区/地域である応答を提供したいと思います。コンセプトテストでは、「ニューヨーク」を「ブロンクス、ニューヨーク、ブロンクス郡、ニューヨーク」に変更し、ブロンクスと既存のデータ要素のテキスト文字列を使用します。これは最終的にはより複雑になりますが、最初に基本を理解したいと思います。
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;
}
};