0

我正在尝试更新页面上所有选择列表的选项,并使用 JavaScript 实现了在 Get list of all `input` objects 上找到的解决方案,而无需访问 `form` 对象和其他页面。

这在一定程度上有效,但只有在触发 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;

}

我是一名公认的新手,并且正在将一个电子商务平台的脚本改编为另一个,所以在某些领域我感到手足无措,所以请随时提出其他建议。

4

1 回答 1

0

这是一种可能的解决方案和小提琴

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;
        }
    }
}
于 2012-08-02T20:06:14.943 回答