jQuery自动完成:从单个字段获取JSON输入和设置多个字段

时间:2010-04-01 03:47:00

标签: jquery json autocomplete types

我正在尝试获取jQuery自动完成插件以将本地JSON变量作为输入。一旦用户从自动完成列表中选择了一个选项,我希望相邻的地址字段自动填充。

这是在HTML文件中声明为全局变量的JSON变量:

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”。然后当选择“Home”时,相邻的字段会自动填充Street:Easy St,City:Emerald City等。

以下是我自动完成的代码:

$(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 个答案:

答案 0 :(得分:1)

只是一个快速的,我相信for循环在这里是错误的,导致列表中没有显示

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

应该是

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

less或equal(&lt; =)将导致行中未定义的数组