2012-08-02 66 views
0

我試圖更新頁面上所有選擇列表的選項,並實施了在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; 

}

我是承認的新手,我從一個電子商務平臺,適應腳本另一個使我陷於癱瘓在某些方面讓心情隨意提出其他建議。

+0

您好,是的,我有個二十五歲的選擇列表之間,每種原料從1-12選項。每個選項都適用於巧克力,並且允許他們最多選擇12個,但是以任意組合 - 所以如果他們從一個選擇列表中選擇4個,則所有其他選擇列表都應更新爲僅啓用選項1-8。如果他們從下一個列表中選擇2,那麼每個列表將被限制爲1-6,依此類推。上面的腳本可以正常工作,但是隻有在選擇了選項之後纔會更新選擇列表,而不是更新頁面之前的選擇列表。 – 2012-08-02 17:49:46

回答

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; 
     } 
    } 
} 
+0

非常感謝Stano它*幾乎*那裏。我需要做的一個改變是,由於電子商務系統的工作方式,選擇列表選項值與列表中顯示的值不同(即選項文本是1,2,3等,但是值是例如2234,2245,2246,2247)。這些值是系統所需的,所以我們不能更改這些值,因此我們需要從選擇列表中讀取文本內容而不是實際值。有沒有辦法做到這一點? – 2012-08-03 12:14:28

+0

嗨,是的,這很容易修改。我更新了[小提琴](http://jsfiddle.net/lalatino/hBf2t/),所以現在它用「selectedIndex」計數,所以'value'屬性現在可以是任何東西。另一種可能的解決方案是使用[HTML 5 data-Attributes](http://ejohn.org/blog/html-5-data-attributes/)。 – Stano 2012-08-03 12:20:32

+0

明白了 - 改變了糖果當前拉.selectedIndex而不是.value,似乎這樣做。現在我只需要將它從這個測試頁面中取出來,看看它在實際網站中實施時是否仍然有效!大道具給你。 – 2012-08-03 12:39:01