0

ページ上のすべての選択リストのオプションを更新しようとしていますが、`form`オブジェクトや他のページにアクセスせずにJavaScriptを使用してすべての`input`オブジェクトのリストを取得するで見つかったソリューションを実装しました。

これはある程度機能しますが、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;

}

私は初心者として認められており、あるeコマースプラットフォームのスクリプトを別のプラットフォームに適応させているため、特定の分野で困惑しているので、他の提案をしてください。

4

1 に答える 1

0

ここに可能な解決策とフィドルの1つがあります:

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 に答える