【问题标题】:Looping through and updating the values in a select list循环并更新选择列表中的值
【发布时间】:2012-08-02 13:12:19
【问题描述】:

我正在尝试更新页面上所有选择列表的选项,并实施了在 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;

}

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

【问题讨论】:

  • 您好,是的,我有 5 到 20 个选择列表,每个列表都从 1 到 12 的选项开始。每个选项都适用于巧克力,他们最多可以选择 12 个,但可以任意组合 - 因此,如果他们从一个选择列表中选择 4 个,则所有其他选择列表应更新为仅启用选项 1-8。如果他们从下一个列表中选择 2,则每个列表将限制为 1-6,依此类推。上面的脚本工作正常,但只在选择了选项的那个之后更新选择列表,页面上之前的那些没有更新。

标签: javascript loops getelementsbytagname


【解决方案1】:

这是一种可能的解决方案,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;
        }
    }
}

【讨论】:

  • 非常感谢 Stano,它几乎就在那儿了。我需要做的一项更改是,由于电子商务系统的工作方式,选择列表选项值与列表中显示的值不同(即选项文本为 1、2、3 等,但例如,2234、2245、2246、2247)。这些值是系统需要的,因此我们无法更改这些值,因此我们需要从选择列表中读取文本内容而不是实际值。有没有办法做到这一点?
  • 嗨,是的,很容易修改。我更新了the fiddle,所以现在它与selectedIndex 一起计算,所以value 属性现在可以是任何东西。另一种可能的解决方案是使用HTML 5 data- Attributes
  • 知道了 - 将 bonbonsCurrent 更改为拉 .selectedIndex 而不是 .value ,这似乎可以做到。现在我只需要把它从这个测试页面中拿出来,看看它在实际站点中实现时是否仍然有效!给你的大道具。
  • 刚刚意识到我们一定是被帖子绊倒了,在注意到您的回复之前我已经找到了解决方案,但是无论如何还是非常感谢,非常感谢。
  • 一点点?斯塔诺你救了我的理智! :)
猜你喜欢
  • 2011-09-11
  • 2014-12-07
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 2018-06-09
相关资源
最近更新 更多