2010-10-05 212 views
0

我有一個主要的選擇「主要」,以及從2到9的列表,取決於情況,更多的選擇。 如果我想要更改所有這些二級選擇中的值,那麼使用與主選擇相同的值會怎麼樣?所以主要選擇將改變1個多選擇在同一時間: 所以,我已經得到了主要的選擇:選擇下拉列表html

<select name="main" id="main" onchange="document.getElementById('item').value = document.getElementById('main').value"> 
    <option value = p>Please Select</option> 
    <option value = b>BOOK</option> 
    <option value = d>DVD</option> 
</select> 

而接下來的選擇是在一個循環中的PHP做的,所以我將有2個, 3,4,5,...,9根據情況選擇。他們中的每一個不同的名字(因爲我使用POST這個名字)

<select name=item_".$itemnumber." id="item"> 
<option value = p>Please Select</option> 
<option value = b>BOOK</option> 
<option value = d>DVD</option> 
</select> 

有了這個,我想有一個時間來選擇對所有選擇該選項的可能性,但維持的可能性只有改變一些選擇。

回答

0

我沒有看到任何問號。

我看到的唯一問題是您應該使用.selectedIndex而不是.value

jQuery的解決方案:

$(".selectorClass").each(function(index, selectorToUpdate){ 
    selectorToUpdate.selectedIndex = $('#main').selectedIndex; 
}); 

將這個在功能和要求的onchange這個函數。

+0

如果我這樣做的價值或selectedIndex是相同的。我只更改id = item的第一個選擇,但不是下一個。 – pepersview 2010-10-05 07:39:46

+0

給他們所有的同一班,不是ID!然後循環getElementsByTagName('select')並檢查是否添加了className,或者更容易使用jQuery或protortype,以便可以使用類選擇器和每個函數。如果你不使用JavaScript框架,你應該考慮使用一個。 – 2010-10-05 07:47:48

+0

另外,在選擇的DOM元素上沒有值屬性。有些瀏覽器選擇實現它,但不應該依賴它。 – 2010-10-05 07:51:26

0

我的理解是,您有一個<select>下拉列表,並且在更改此文本中的文本時,您希望更改屏幕上一個或多個其他下拉列表中的選擇內容。我對嗎?

如果是這樣的話,那麼你必須有一個javascript函數,並在<select>onchange中調用此函數。
在此javascript函數中,您必須設置所需的所有下拉列表的所選值。

如果這不是你想要的,你能否重新解釋你的問題,告訴我們你到底想要什麼?

編輯

  function setElement() 
     { 
       var selectedValue = document.getElementById("main").value; 
       selectThisValue(document.getElementById("child1"), selectedValue); 
       selectThisValue (document.getElementById("child2"), selectedValue); 
     } 

     function selectThisValue(selectElement, val) 
     { 
      for (var i = 0; i < selectElement.options.length; i++) 
      { 
       if (selectElement.options[i].value == val) 
       { 
       selectElement.options[i].selected = true; 
       return; 
       } 
      } 
     } 

在你的主要的平變化呼叫setElement()。該功能從主要<select>中獲取所選項目,並選擇其他下拉菜單中具有相同值的項目。
您需要爲每個需要更改的選項調用selectThisValue函數一次。
根據您的代碼更改ID。

+0

是的,這就是我想要的。你是對的。但我的問題是做這個功能。我如何設置一個選擇的價值(如果我現在不知道我有多少)?我嘗試通過給所有人的相同ID ... – pepersview 2010-10-05 07:43:37

0

我做這工作就像是:

function changeValue(theElement) { 
    var theForm = theElement.form, z = 0; 
    for(z=0; z<theForm.length;z++){ 
     if(theForm[z].id == 'item' && theForm[z].id != 'main'){ 
      theForm[z].selectedIndex = theElement.selectedIndex; 
     } 
    } 
} 

但我不知道如果那是最好的辦法,我聽說這裏的jQuery會更容易些,所以我想知道如何使它在jQuery中,請。

0

永遠不要在所有選擇元素中放入相同的ID ... ID應該是頁面元素唯一的。 改變你的HTML看起來像

<select id="main" class="master">....</select> 
<select id="test1" class="child">....</select> 
<select id="test2" class="child">....</select> 
<select id="test3" class="child">....</select> 
<select id="test4" class="child">....</select> 

類屬性的多個元素可以是相同的。

你的功能需要修改,看起來像這樣 (我還沒有測試這一點,但應該工作。)

function changeValue(theElement) { 
    var theForm = theElement.form, z = 0; 
    for(z=0; z<theForm.length;z++){ 
     if(theForm[z].className == 'child'){ 
      theForm[z].selectedIndex = theElement.selectedIndex; 
     } 
    } 
} 

順便說一下,裏面做的選項,這些選擇框有什麼不同?如果是的話,你必須通過值而不是指數匹配

編輯:這是我後來寫的代碼..修改,以適合您的需要

<html> 
<head><title>select change cascade</title></head> 
<body> 
<select id="main" class="master"><option value="1">book</option><option value="2">cd</option></select> 
<select id="test1" class="child"><option value="1">book</option><option value="2">cd</option></select> 
<select id="test2" class="child"><option value="1">book</option><option value="2">cd</option></select> 
<select id="test3" class="child"><option value="1">book</option><option value="2">cd</option></select> 
<select id="test4" class="child"><option value="1">book</option><option value="2">cd</option></select> 
<script type="text/javascript" src="./selectchange.js"></script> 
</body> 
</html> 

和selectChange.js

var main = document.getElementById("main"); 
main.onchange = function(){ 
    sels = document.getElementsByTagName("select"); 
    for(z=0; z<sels.length;z++){ 
     if(sels[z].className == 'child'){ 
      sels[z].selectedIndex = this.selectedIndex; 
     } 
    } 
} 
+0

如果選項不同,尼瓦斯的代碼是正確的.. – 2010-10-05 08:23:07

+0

在主人和孩子中的選項總是相同的 – pepersview 2010-10-05 08:30:55

+0

我試圖使用它類,因爲它看起來合乎邏輯,但我不能讓它工作。 – pepersview 2010-10-05 08:51:28