循环并更新选择列表中的值

时间:2012-08-02 13:12:20

标签: javascript loops getelementsbytagname

我正在尝试更新网页上所有选择列表的选项,并实施了Get list of all `input` objects using JavaScript, without accessing a `form` object和其他网页上的解决方案。

这在一定程度上起作用,但只有在触发javascript的那个之后发生的选择列表被更新,而我需要它们全部完成,无论它们相对于触发选择的位置如何。

以下是我所拥有的简化版本:

function chooseBon(id, value) {

var bonbonsAmount  = 12;
    var bonbonsCurrent = 0;
    var bonbonsCount   = 4;

    var inputs, index;


    // get all the select lists
    inputs = document.getElementsByTagName('select');

// loop through all the lists
    for (index = 0; index < inputs.length; ++index) {

// First disable all options
for (j = 0; j<=bonbonsAmount; ++j) {
    inputs[index].options[j].disabled="disabled";
}

    // Then re-enable the ones we still need
    for (j = 0; j<=(bonbonsAmount - bonbonsCurrent); ++j) {
    inputs[index].options[j].disabled="";
}

// add up the no of chocs selected so we know how many options to re-enabled above
bonbonsCurrent += inputs[index].selectedIndex;

}

我是一名录取的新手,我正在调整一个电子商务平台的脚本,因此在某些方面受到限制,所以请随意提出其他建议。

1 个答案:

答案 0 :(得分:0)

这是一个可能的解决方案和the fiddle

function chooseBon() {
    var bonbonsAmount = 12;
    var bonbonsCurrent = 0;
    var bonbonsRemaining; //max. is bonbonsAmount
    var inputs, i, j;
    inputs = document.getElementsByTagName('select');
    for (i = 0; i < inputs.length; i++) {
        bonbonsCurrent += parseInt(inputs[i].value, 10);
    }
    bonbonsRemaining = bonbonsAmount - bonbonsCurrent;
    for (i = 0; i < inputs.length; i++) {
        for (j = 0; j <= bonbonsAmount; j++) {
            inputs[i].options[j].disabled = (j < bonbonsRemaining + parseInt(inputs[i].value, 10) + 1) ? false : true;
        }
    }
}