我正在使用jquery ui自动完成。
我的问题是当我使用外部json的调用时,建议功能停止工作。
$(document).ready(function() {
$('.comu').autocomplete({
source: function(request, response) {
$.ajax({
url: "https://raw.githubusercontent.com/edusl/test/master/municipios1.json",
dataType: "json",
success: response
});
},
minLength: 0,
autoFocus: true,
select: function(event, ui) {
event.preventDefault();
$(".comu").val(ui.item.label);
},
});
});
我的代码示例:codepen
提前致谢!
答案 0 :(得分:0)
我怀疑你可能已经找到了回复此问题的人。但是这里有一个解决方案。
$(document).ready(function() {
$('.comu').autocomplete({
source: function(request, response) {
$.ajax({
url: "https://raw.githubusercontent.com/edusl/test/master/municipios1.json",
dataType: "json",
success: function(jData) {
var results = [];
$.each(jData, function(ind, val) {
if (val.label.toLowerCase().indexOf(request.term) === 0) {
results.push(val);
}
});
response(results);
}
});
},
minLength: 0,
autoFocus: true,
select: function(event, ui) {
event.preventDefault();
$(".comu").val(ui.item.label);
},
});
});
工作示例:https://jsfiddle.net/Twisty/mL3h8pm0/
AJAX请求将返回所有结果,这就是您传递给response
的内容。因此,如果您在将其传递给response
之前没有对其进行过滤,那么您将始终获得完整的列表。
这会使用indexOf()
过滤列表,但您可以使用任何您喜欢的方法。
这是另一个可以减少HTTP开销的解决方案:
var m = [];
$(document).ready(function() {
$.getJSON("https://raw.githubusercontent.com/edusl/test/master/municipios1.json", function(result) {
$.each(result, function(ind, val) {
m.push(val);
});
});
$('.comu').autocomplete({
source: m,
minLength: 0,
autoFocus: true,
select: function(event, ui) {
event.preventDefault();
$(".comu").val(ui.item.label);
},
});
});
工作示例:https://jsfiddle.net/Twisty/mL3h8pm0/2/
这将获取所有数据并填充数组。然后,自动填充可以像平常一样使用它。