4

ソースが別の関数に基づいて計算される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 関数からソースを設定する方法を誰か教えてもらえますか?

4

3 に答える 3

7

ソース関数には、リクエストとコールバックの2 つのパラメーターがあります。応答が戻ってきたら、コールバックを呼び出す必要があります。

$( 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);
    });
}

デモ:フィドル

于 2013-09-12T15:56:47.960 に答える
0

例:

source: function (request, response) { // Contains
    var searchString = request.term,
        array = [];

    // OPTIONS
    array.push('test 1');
    array.push('foo');
    array.push('var');

    response(array);
}
于 2014-08-26T13:59:57.090 に答える