来自另一个js函数的JQuery自动完成源代码

les*_*ick 4 jquery jquery-ui autocomplete

我有一个Jquery自动完成函数,其源是基于另一个函数计算的,request.term所以我无法计算如何设置源属性.

自动完成:

$( "#finder_city" ).autocomplete({
    source: function(request){
        var searchParam  = request.term;
        init(searchParam);
    },
    minLength: 2,
});
Run Code Online (Sandbox Code Playgroud)

我的功能:

function init(query) {
//lot of code 
return response;
Run Code Online (Sandbox Code Playgroud)

}

我的函数返回有效数据,response = [ city1, city2, city3 ];但自动完成只是启动"加载器图标",没有任何反应,没有错误的日志.

任何人都可以说如何从另一个js函数设置源代码?

Aru*_*hny 7

函数有两个参数,请求和回调,一旦反应回来,你需要调用回调

$( 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);
    });
}
Run Code Online (Sandbox Code Playgroud)

演示:小提琴