Javascript 使用json进行组合选择

Javascript 使用json进行组合选择,javascript,jquery,json,Javascript,Jquery,Json,国家和州将作为json发送 { "data": [ { "country": "USA", "states": [ "Alabama", "Alaska", "Arizona" ] }, { "country": "India",

国家和州将作为json发送

{
    "data": [
        {
            "country": "USA",
            "states": [
                "Alabama",
                "Alaska",
                "Arizona"
            ]
        },
        {
            "country": "India",
            "states": [
                "TN",
                "AP",
                "Mumbai"
            ]
        }
    ]
} 
将有两个选择标记country和state。如何根据所选国家填充州


我正在寻找一种类似于row.data返回特定行的数据集的解决方案。

这里有一种非常简单的纯JavaScript方法,可以通过JSON填充两个选择框。在此示例中,状态取决于选择的国家

例如:

HTML:

JavaScript:

试试这个:- HTML:-

JS:-


使用AngularJS可以减少代码的大小no?@NicolasCharvozKurzawa-因此添加一个121KB的大型JavaScript库来完成一个简单的JavaScript任务是正确的答案吗?添加121KB是如何减少代码大小的?我说的更多的是关于代码长度的问题对不起。当然这是一个很好的解决方案。但我在考虑重复一遍。只是想得到一个建议。无意冒犯:当然,有一些库可以在几行内完成这项工作,即使jQuery也会大大减少代码块的大小。然而,由于OP显然不太熟悉JavaScript,我更愿意给出纯js的答案。我认为人们应该在使用任何库之前学习JavaScript。从长远来看,这更有帮助。不过这只是我的意见。
<select id="country">
    <option>Country</option>
</select>
<select id="state">
    <option>State</option>
</select>
var d = {
    "data": [
        {
            "country": "USA",
            "states": [
                "Alabama",
                "Alaska",
                "Arizona"
            ]
        },
        {
            "country": "India",
            "states": [
                "TN",
                "AP",
                "Mumbai"
            ]
        }
    ]
}
// First - populate the Country select box from the JSON
for (var i in d.data) {
    var elem = document.createElement("option");
    elem.value = d.data[i].country;
    elem.innerHTML = d.data[i].country;
    document.getElementById("country").appendChild(elem);
}

// Next - add an event handler that will trigger when Country is changed and populate the State box
document.getElementById("country").addEventListener("change", function () {
    document.getElementById("state").innerHTML = "";
    var country = document.getElementById("country").options[document.getElementById("country").selectedIndex].value;
    if (country === "Country") {
        var elem = document.createElement("option");
        elem.value = "State";
        elem.innerHTML = "State";
        document.getElementById("state").appendChild(elem);
    }
    for (var i in d.data) {
        if (d.data[i].country === country) {
            for (var a = 0; a < d.data[i].states.length; a++) {
                var elem = document.createElement("option");
                elem.value = d.data[i].states[a];
                elem.innerHTML = d.data[i].states[a];
                document.getElementById("state").appendChild(elem);
            }
        }
    }
});
<select id="country"></select>
<select id="states"></select>
jQuery(function ($) {
    var input = {
        "data": [{
            "country": "USA",
                "states": [
                "Alabama",
                "Alaska",
                "Arizona"]
        }, {
            "country": "India",
                "states": [
                "TN",
                "AP",
                "Mumbai"]
        }]
    };

    $.each(input.data, function (index, d) {
        $("#country").append("<option value=\"" + d.country + "\">" + d.country + "</option>");
    });

    $("#country").on("change", function () {
        var selectedCountry = $("#country").val();
        var t = $.map(input.data, function (obj) {
            if (obj.country === selectedCountry) return obj;
        });
        if (t.length != 0) {
            $('#states').empty();
            debugger;
            $.each(t[0].states, function (index, d) {
                $("#states").append("<option value=\"" + d + "\">" + d + "</option>");
            });
        }
    });

    $("#country").change();

});