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

时间:2013-09-12 15:54:37

标签: jquery jquery-ui autocomplete

我有一个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函数设置源?

3 个答案:

答案 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);
}