以下のコードを使用してオートコンプリートを実装しようとすると、次のエラーが表示されます。
.data("autocomplete") is undefined
.data()メソッドを最後から削除しても、うまく機能します(.data()が提供するカスタマイズ可能なグラフィックスがなければ)。誰が間違っているのか教えてもらえますか?
$("input#testInput").bind("autocompleteselect", function (event, ui) {
}).autocomplete({
appendTo: "#autoCompList",
source: function (request, response) {
$.ajax({
url: JSONP CALL URL
dataType: "jsonp",
data: {
featureClass: "P",
style: "full",
maxRows: 12,
name_startsWith: request.term
},
success: function (data) {
response($.map(data.data, function (item) {
fbPageJson = item;
return {
label: item.name,
image: item.picture,
json: item,
}
}));
},
});
}
}).data("autocomplete")._renderItem = function (ul, item) {
return $("<li></li>").data("item.autocomplete", item).append("<a><img src='" + item.image + "' alt='no photo'/></a>" + item.label).appendTo(ul);
};
私は同じ問題を抱えていて、jquery uiの1.10.0バージョンに基づいて、試してみるべきだと思います
data('uiAutocomplete')
の代わりに
data('autocomplete')
ジョニーのコメントに基づいて、.data()関数の動作を確認しました。はい、セレクタがアイテムを見つけられない場合、jQueryは.data()呼び出しからnullを返します。
したがって、セレクタに一致する要素がない場合、オートコンプリートオブジェクトは作成されず、カスタムデータオブジェクトに追加されません。
したがって、これを行う方が良いようです:
$(selector).autocomplete({ your autocomplete config props here });
if ( $(selector).data() ) {
// some jQueryUI versions may use different keys for the object. so to make sure,
// put a breakpoint on the following line and add a watch for $(selector).data().
// then you can find out what key is used by your jQueryUI script.
var ac = $(selector).data('uiAutocomplete');
if ( ac ) {
// do what you want with the autoComplete object. below is the changed version of an example from jqueryUI autocomplete tutorial
ac._renderItem = function(ul, item) {
return $("<li>")
.append("<a>" + item.label + "</a>")
.appendTo(ul);
};
}
}
一部の人々は「ui-autocomplete」が間違っていると考えているため、「autocomplete」または「uiAutocomplete」を使用していますが、それは間違っています。実際、これを行うには「ui-autocomplete」が正しい方法です。
私はあなたと同じ問題を抱えており、友人とこのコードの問題を見つけました。代わりに:
.data('ui-autocomplete')._renderItem = function (ul, item) {
if (!_.include(self.idArr, item.id)) {
return $('<li></li>').data('ui-autocomplete-item', item).append('<a>' + item.name + '</a>').appendTo(ul);
}
};
使用する:
._renderItem = function (ul, item) {
if (!_.include(self.idArr, item.id)) {
return $('<li></li>').data('ui-autocomplete-item', item).append('<a>' + item.name + '</a>').appendTo(ul);
}
};
Comboboxとautocompleteはdata( 'ui-autocomplete')を返すので、.data( 'ui-autocomplete')と入力すると次のようになります。
.data('ui-autocomplete').data('ui-autocomplete')
何が問題なのか....まあ、実際、なぜこれが機能しないのか、なぜこれが機能しないのかわかりませんが、私を信頼して、.data( 'ui-autocomplete')を削除して幸せになります!
data('ui-Autocomplete')
は私の問題を解決しました。 _jquery 1.7
_と_jquery-ui 1.8
_からだと思います。 data('autocomplete')
は大丈夫でした。これらのファイルの最新バージョンを使用した同じスクリプトは機能しません。
実際に成功関数では、response
を呼び出して、次のようなオブジェクトを返します。
return {
label: item.name,
image: item.picture,
json: item,
}
しかし、次の行で
return $("<li></li>").data("item.autocomplete", item).append("<a><img src='" + item.image + "' alt='no photo'/></a>" + item.label + " Number of Likes: " + item.likes).appendTo(ul);
返されたオブジェクトで利用できないitem.likes
を使用しているため、問題です。次のように使用できると思います
success:function(data) {
var result = $.map(data, function (item){
return {
label: item.name,
image: item.picture,
item.likes
};
});
response(result);
}
また、item.label
を<a></a>
内に保持します(エラーの原因ではない可能性があります)。
return $("<li></li>").data("item.autocomplete", item).append("<a><img src='" + item.image + "' alt='no photo'/>"+item.label+"</a>").appendTo(ul);
そして、次の行で確認してください
$.map(data.data, function (item) // notice data.data
data.data
であるか、data
のみであるか。私が関係している限り、どこでも使用しなかったため、オブジェクトからjson: item
を削除することもできます。
更新:次の行を変更
.data("autocomplete")._renderItem = function (ul, item) {...};
に
.data("autocomplete")?._renderItem = function (ul, item) {...}; // notice the ? mark
または
if(typeof $('#Your_Input_Id').val()!="undefined")
{
$('#Your_Input_Id').autocomplete({....});
}
または
var mydata=$('#Your_Input_Id').autocomplete(...).data('autocomplete');
if(mydata)
mydata._renderItem = function (ul, item) {...};
サイトのデモでコンボボックスの最新の例を見ると、data( 'ui-Autocomplete')を使用していることがわかります。私はあなたと同じ問題に遭遇しました。以前はjquery-1.6.2とjquery-ui-1.8.16を使用していました。ファイルをjquery-1.9.1およびjquery-ui-1.10.0に更新すると、エラーは修正されました。古いjquery-uiオートコンプリートはdata( 'ui-Autocomplete')プロパティを設定していなかったため、取得時にnull/undefinedだったと思います。おそらく既に問題を修正しているので、これが他の人に役立つことを願っています。
以下の行を実装できます
.autocomplete( "インスタンス")._ renderItem = function(ul、item){
の状態
.data( "autocomplete")._ renderItem = function(ul、item){
jqueryサイトで入手可能なドキュメントに従って Jquery AutoComplete Documentation and example このコードがあります。
jquery 1.10のアップグレードバージョンから、コードが変更されました。これがあなたのお役に立てば幸いです。