隨着我提出的其他意見,我作出的jsfiddle工作示例:https://jsfiddle.net/Twisty/xp43u291/
HTML
<input name="myList" id="test">
<span id="#message"></span>
JavaScript
$(document).ready(function() {
setTimeout(function() {
$('#test').autocomplete({
source: function(request, response) {
$.ajax({
url: "brands.json",
dataType: "JSON",
type: "GET",
success: function(resp) {
console.log("Find '", request.term, "' in ", resp.brands);
var results = [];
$.each(resp.brands, function(k, v) {
if (v.indexOf(request.term) == 0) {
results.push(v);
}
});
response(results);
}
});
},
autoFocus: true,
minLength: 3,
response: function(event, ui) {
if (!ui.content.length) {
var noResult = {
value: "",
label: "No results found"
};
ui.content.push(noResult);
} else {
$("#message").empty();
}
}
});
var render = $('#test').autocomplete('instance')._renderMenu;
$('#test').autocomplete('instance')._renderMenu = function(ul, items) {
items.push({
label: 'OTHER BRAND',
value: 'OTHER BRAND',
last: true
});
render.call(this, ul, items);
};
}, 100);
});
首先,你不希望使用$(document).ready();
和$(function(){});
。使用一個或另一個。
其次,由於您正在調用JSON文件而不是腳本,因此沒有任何內容傳遞給文件本身。所以我們刪除data
選項。
第三,在success
上,我們期待將JSON數據作爲對象。 IT將回來所有的數據,我們想要將它與下面的結果配對,只是匹配我們的request.term
或輸入的字符串。你可以用很多方式做到這一點,我使用.indexOf()
進行了一個簡單的循環。如果您希望它在整個短語中搜索而不僅僅是開頭,您可以將其從==0
更改爲>=0
。
我希望能幫助你解決這個問題。如果沒有,評論或更新您的文章。
爲什麼不僅僅是'return data.brands;'in response()? – Twisty
你的'$(document).ready();'在第53行上的結尾是錯誤的。第52行應該是:'},100);'和第53行應該是:'});'。 – Twisty
我在您的HTML中看不到具有'test'作爲ID的元素。 – Twisty