通过更改第二个组合框来更新一个组合框

时间:2014-05-10 21:40:24

标签: javascript jquery-mobile combobox

我想通过更改第二个组合框来更新一个组合框。 例如: 我有这个回复(字符串):

var response = [{
    "A": "a2",
    "B": "b2",
    "C": "c2"
},
{
    "A": "a3",
    "B": "b3",
    "C": "c3"
},
{
    "A": "a3",
    "B": "b331",
    "C": "c33"
},
{
    "A": "a3",
    "B": "b33221",
    "C": "c3"
},
{
    "A": "a4",
    "B": "b4",
    "C": "c4"
},
{
    "A": "a2",
    "B": "b221",
    "C": "c222"
}];

我希望在" myDropDownA"将是" a2,a3,a4"。 例如: 如果我选择" a3" in" myDropDownA",而不是" myDropDownB"将仅出现:" b3,b331,b33221" (因为他们只提到a3)。 而且我不想重复" A"对象。

var myDropDownA = $("#myDropDownA");
$.each(response, function (index, obj) {
    //alert(index + ": " + obj.A);
    myDropDownA.append($("<option />").val(obj.A).text(obj.A));
});

    var myDropDownB = $("#myDropDownB");
    $.each(response, function (index, obj) {
        //alert(index + ": " + obj.B);
        myDropDownB.append($("<option />").val(obj.B).text(obj.B));
});

我需要更改(或添加)以使其按上述方式工作?

1 个答案:

答案 0 :(得分:0)

您缺少的是将事件处理程序附加到下拉列表的更改事件中。使用相关值重新填充下拉列表B.

var response = [
    { "A": "a2", "B": "b2", "C": "c2" },
    { "A": "a3", "B": "b3", "C": "c3" },
    { "A": "a3", "B": "b331", "C": "c33" },
    { "A": "a3", "B": "b33221", "C": "c3" },
    { "A": "a4", "B": "b4", "C": "c4" },
    { "A": "a2", "B": "b221", "C": "c222"}
];

var uniqueByProperty = function(arr, prop) {
    var seen = {};
    return arr.filter(function(elem) {
        var val = elem[prop];
        return (seen[val] === 1) ? 0 : seen[val] = 1;
    })
}

var aList = uniqueByProperty(response, "A");
var myDropDownA = $("#myDropDownA");
var myDropDownB = $("#myDropDownB");

// Populate dropdown A
$.each(aList, function(index, obj) {
    myDropDownA.append($("<option />").val(obj.A).text(obj.A));
});

// Attach event handler for dropdown A
myDropDownA.on('change', function(){
    var ddl = $(this);

    // Get related objects
    var bList = response.filter(function(elem) {
        return (elem.A === ddl.val());
    });

    // Populate dropdown B
    myDropDownB.empty();
    $.each(bList, function(index, obj) {
        myDropDownB.append($("<option />").val(obj.B).text(obj.B));
    });
});

// Trigger population of dropdown B
myDropDownA.change();

请参阅此jsfiddle进行工作演示。