以下のコードではgetJSON
というネストされたデータを処理しています。> 1レコードが返され、オートコンプリートでソートされています。 jquery .autocompleteは最後のレコードのみを表示します
最終的なデータが代わりに表示されるだけで、最後のレコードを意味し、return $("<li>")
は以前はJSONデータを返さ上書きするようで更新する.autocomplete("instance")
それぞれ呼び出しに渡され(6一致するレコードを言うことができます)
{
"ok": [
{
"myName": "Back Office",
"myModule": "back01",
"myDesc": "Developing a the platform"
},
......
]
}
.autocompleteルーチンをデバッグするときに、レコード数に合わせて正しい回数だけループすると、各ループは前のレコードに追加するのではなく、新しいオブジェクトである<li>
を上書きしているようです。
なぜ上書きが行われますか?
ありがとうございました アート!
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(function() {
$("#my_module_in").autocomplete({
minLength: 1,
source: function(request ,response){
$.getJSON("https://api.myapi.com/getStuff", function (data) {
$.each(data, function (okKey, val00) {
if (okKey === 'ok') {
$.each(val00, function (key201, val201) {
response($.map(data, function (item) {
return {
label: val201.myName,
value: val201.myModule+"_"+val201.myDesc,
}
}))
})
}else{
console.log("error:noJson");
}
})
});
},
focus: function(event, ui) {
console.log(ui.item.label);
return false;
},
select: function(event, ui) {
$("#my_module_in").val(ui.item.label);
$("#my_module").val(ui.item.value);
$("#my_module_description").html(ui.item.value);
return false;
}
})
.autocomplete("instance")._renderItem = function(ul, item) {
return $("<li>")
.append("<div>" + item.label + "<br>" + item.value + "</div>")
.appendTo(ul);
};
});
</script>
</head>
<body>
<div id="my_module_label">Op_Group</div>
<input id="my_module_in">
<input type="hidden" id="my_module">
<p id="my_module_description"></p>
おかげで、素晴らしい作品。 –