автозаполнение bootstrap typeahead возвращает несколько одинаковых значений

У меня есть следующая функция jquery, которая принимает источник как json с сервера. Но когда я запускаю этот скрипт в клиенте, как только я набираю, я получаю несколько одинаковых значений, и оно продолжает увеличиваться, когда я продолжаю вводить ключи.

function autocomplete(html_field, request_url, hidden_field){
    var map = {};
    var objects = [];
    $(html_field).typeahead({
    minlength: 3,
    source: function (query, process) {
        return $.get(request_url, { query: query }, function (data) {
            $.each(data, function(i, obj){
                map[obj.translations__name] = obj;
                objects.push(obj.translations__name);
            });
            return process(objects);
            });
    },
    updater: function (item) {
        $(hidden_field).val(map[item].id);
        return item;
        }
    });
}

Любые идеи ?


person tuna    schedule 03.05.2013    source источник


Ответы (1)


Я думаю, вам нужно очистить объекты массива перед вашей функцией .each(), потому что для каждого вызова jquery данные помещаются в массив.

    source: function (query, process) {
        return $.get(request_url, { query: query }, function (data) {
            objects.splice(0, objects.length);
            $.each(data, function(i, obj){
                map[obj.translations__name] = obj;
                objects.push(obj.translations__name);
            });
            return process(objects);
            });

Здесь вы можете увидеть пустой массив: Как очистить массив в JavaScript?

person Getz    schedule 03.05.2013