Автозаполнение jQuery: ввод JSON и установка нескольких полей из одного поля - PullRequest
1 голос
/ 01 апреля 2010

Я пытаюсь заставить плагин автозаполнения jQuery принять локальную переменную JSON в качестве входных данных. После того, как пользователь выбрал один вариант из списка автозаполнения, я хочу, чтобы смежные поля адреса были заполнены автоматически.

Вот переменная JSON, объявленная как глобальная переменная в файле HTML:

varJSON_address={
    "1": {
        "origin": {
            "nametag": "Home",
            "street": "Easy St",
            "city": "Emerald City",
            "state": "CA",
            "zip": "9xxxx"
        },
        "destination": {
            "nametag": "Work",
            "street": "Factory St",
            "city": "San Francisco",
            "state": "CA",
            "zip": "94104"
        }
    },
    "2": {
        "origin": {
            "nametag": "Work",
            "street": "Umpa Loompa St",
            "city": "San Francisco",
            "state": "CA",
            "zip": "94104"
        },
        "destination": {
            "nametag": "Home",
            "street": "Easy St",
            "city": "Emerald City ",
            "state": "CA",
            "zip": "9xxxx"
        }
    }
}

Я хочу, чтобы первое поле отображало список именных тегов «origin»: «Home», «Work». Затем, когда выбран «Дом», соседние поля автоматически заполняются улицей: Легкая улица, Город: Изумрудный город и т. Д.

Вот код, который у меня есть для автозаполнения:

$(document).ready(function(){

    $("#origin_nametag_id").autocomplete(JSON_address, {
        autoFill:true, 
        minChars:0, 
        dataType: 'json', 
        parse: function(data) {
            var rows = new Array();
            for (var i=0; i<=data.length; i++) {
                rows[rows.length] = { data:data[i], value:data[i].origin.nametag, result:data[i].origin.nametag };
            }   
            return rows;
        }
    }).change(function(){
        $("#street_address_id").autocomplete({
          dataType: 'json',
          parse: function(data) {
            var rows = new Array();
            for (var i=0; i<=data.length; i++) {
                rows[rows.length] = { data:data[i], value:data[i].origin.street, result:data[i].origin.street };
            }   
            return rows;
          }  
        });
    }); 
});

Так что этот вопрос действительно состоит из двух частей: 1) Как получить автозаполнение для обработки многомерного объекта JSON? (При нажатии поля и вводе текста ничего не происходит - нет списка) 2) Как получить другие поля (улица, город и т. Д.) Для заполнения на основе подмассива тегов имени источника?

Заранее спасибо!

1 Ответ

1 голос
/ 31 мая 2010

Просто быстрый, я думаю, что цикл for здесь неправильный, в списке ничего не отображается

    for (var i=0; i<=data.length; i++) {}

должно быть

    for (var i=0; i<data.length; i++) {}

меньше или равно (<=) приведет к неопределенному массиву в строках </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...