json - JSON 中的链式州城市下拉列表

标签 json parsing jquery

我正在尝试填充链接的州城市选择下拉列表。我使用外部 json 文件来执行此操作,其中包含州及其相应的城市名称、id 和 pincode。有人可以给出一些关于如何实现这一目标的想法吗?我需要根据州选择填充城市和 pincode 值。提前致谢...

JSON

{
"Alaska" : [
            {"id": "1", "name": "Adak", "pincode": "xxx1"},
            {"id": "2", "name": "Akhiok", "pincode": "xxx2" },
            {"id": "3", "name": "Akiak", "pincode": "xxx3" },           
       ],

"Arizona" : [
            {"id": "4", "name": "Apache Junction", "pincode": "xxx4"},
            {"id": "5", "name": "Avondale", "pincode": "xxx5"},
            {"id": "6", "name": "Benson", "pincode": "xxx6"},
        ],

"Alabama" : [
            {"id" : "5", "name": "Abbeville", "pincode": "xxx7" },
            {"id" : "7", "name": "Adamsville", "pincode": "xxx8" },
            {"id" : "8", "name": "Akron", "pincode": "xxx9" },
        ]
}

最终渲染的 html

<select id="state">
      <option value="1">Alaska</option>
      <option value="2">Arizona</option>
      <option value="3">Alabama</option>
      </select>

      <select id="city">
      <option value="4">Adak</option>
      <option value="5">Akhiok</option>
      <option value="6">Akiak</option>
      </select>

      <input id="pincode" type="text" />

最佳答案

我发现你的问题很有趣,并写了相应的解决方案,你可以实时看到here .

这是代码:

jQuery(document).ready(function () {
    var myData;
    var onCityChange = function (e) {
        var cityData = $("option:selected", e.target).data('pincode');
        $("#pincode").val(cityData.pincode);
    };
    var onStateChange = function (e) {
        var state = $("option:selected", e.target).text();
        if (state && myData) {
            var stateData = myData[state];
            if (stateData && stateData.length > 0) {
                $("#city").empty();
                $("#city").unbind('change');
                for (var i = 0; i < stateData.length; i++) {
                    var cityData = stateData[i];
                    var option = $('<option value="' + cityData.id + '">' + cityData.name + '</option>')
                                    .data('pincode', cityData);
                    $("#city").append(option);
                }
                $("#city").bind('change', onCityChange)
                            .trigger('change');
            }
        }
    };
    $.ajax({
        url: 'DependendSelectsFromJson.json',
        dataType: 'json',
        success: function (data) {
            var stateOptions = "", stateId = 1;
            for (var prop in data) {
                if (data.hasOwnProperty(prop)) {
                    stateOptions += '<option value="' + stateId + '">' + prop + '</option>';
                    stateId++;
                }
            }
            myData = data;
            $("#state").html(stateOptions)
                .bind('change', onStateChange)
                .trigger('change');
        }
    });
});

访问我使用的第二个(城市)选择框的pincode jQuery.data如果需要将一些附加信息与 DOM 元素关联起来,我发现该函数非常实用。人们只能以这种方式保存 pincode 值,但我使用该函数来保存有关城市的完整信息。

已更新:我忘了提及您发布的 JSON 数据有错误。您应该删除“]”之前的逗号。可能这只是将数据剪切并粘贴到问题文本的问题。

关于json - JSON 中的链式州城市下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4954081/

相关文章:

php - Laravel 在 jquery 中使用来自 Controller 的 json

json - 解析R中的嵌套结构

javascript - 将 JSON 数据读入 Javascript

java - 了解 Spring 3.0 示例中的 Ajax 简化

Delicious feed 的 jQuery RSS 解析问题

javascript - 使用 AJAX 加载跨域端点

javascript - 如何使用 Jquery 设置 zip 文件的密码

java - 如何创建json解析的模型类?

python - sympy : check and parse expression from string

c# - 日期时间c#解析