我有一个Jquery自动完成函数,其源是根据request.term
的另一个函数计算的,所以我无法想象如何设置源属性。
自动完成:
$( "#finder_city" ).autocomplete({
source: function(request){
var searchParam = request.term;
init(searchParam);
},
minLength: 2,
});
我的功能:
function init(query) {
//lot of code
return response;
}
我的函数返回有效数据,如response = [
city1,
city2,
city3
];
但自动完成只是启动“加载器图标”,没有任何反应,日志中没有错误。
有谁可以说如何从另一个js函数设置源?
答案 0 :(得分:7)
source函数有两个参数,请求和回调,一旦响应回来,你需要调用回调
$( document ).ready(function() {
$( "#finder_city" ).autocomplete({
source: function(request, callback){
var searchParam = request.term;
init(searchParam, callback)
},
minLength: 2
});
});
function init(query, callback) {
ymaps.geocode(query, { results: 5 }).then(function (res) {
var response = [];
if (res.geoObjects.get(0) == null) {
}
else if (res.geoObjects.get(1) == null){
response = [
res.geoObjects.get(0).properties.get('text')
];
}
else if (res.geoObjects.get(2) == null){
response = [
res.geoObjects.get(0).properties.get('text'),
res.geoObjects.get(1).properties.get('text')
];
}
else if (res.geoObjects.get(3) == null){
response = [
res.geoObjects.get(0).properties.get('text'),
res.geoObjects.get(1).properties.get('text'),
res.geoObjects.get(2).properties.get('text')
];
}
else if (res.geoObjects.get(4) == null){
response = [
res.geoObjects.get(0).properties.get('text'),
res.geoObjects.get(1).properties.get('text'),
res.geoObjects.get(2).properties.get('text'),
res.geoObjects.get(3).properties.get('text')
];
}
else {
response = [
res.geoObjects.get(0).properties.get('text'),
res.geoObjects.get(1).properties.get('text'),
res.geoObjects.get(2).properties.get('text'),
res.geoObjects.get(3).properties.get('text'),
res.geoObjects.get(4).properties.get('text')
];
}
callback(response);
});
}
演示:Fiddle
答案 1 :(得分:0)
在您的匿名回调中,您需要返回init(searchParam)
的返回值。
只需改变:
init(searchParam);
要:
return init(searchParam);
答案 2 :(得分:0)
示例:
source: function (request, response) { // Contains
var searchString = request.term,
array = [];
// OPTIONS
array.push('test 1');
array.push('foo');
array.push('var');
response(array);
}