2010-07-20 119 views
2

我的JavaScript開關的情況下不工作由於某種原因,我不能弄明白,我想顯示某一輸入只有某一選項被選擇時,的Javascript開關的情況下

function showHideSchools(obj){ 

    var curSel=obj.options[obj.selectedIndex].value 


    switch(curSel) 
    { 
    case '0-2': 
    document.getElementById('schools').style.display="none" 
     break;   
    case '3-5': 
    document.getElementById('schools').style.display="block" 
     break; 
    case '6-8': 
    document.getElementById('schools').style.display="block" 
     break; 
    case '9-11': 
    document.getElementById('schools').style.display="block" 
     break; 
    case '12-14': 
    document.getElementById('schools').style.display="block" 
     break; 
    case '15-16': 
    document.getElementById('schools').style.display="block" 
     break; 
    case '17-18': 
    document.getElementById('schools').style.display="block" 
     break; 
    case '19 and over': 
    document.getElementById('schools').style.display="block" 
     break; 
    default: 
    document.getElementById('schools').style.display="none" 
    } 
} 

下面是HTML:

<p> 
    <label for="childrenAges">Ages of children still living at home: </label> 
    <select name="childrenAges" id="childrenAges" onchange="showHideSchools(this);"> 
    <option>Select one</option> 
    <option value="0-2">0-2</option> 
    <option value="3-5">3-5</option> 
    <option value="6-8">6-8</option> 
    <option value="9-11">9-11</option> 
    <option value="12-14">12-14</option> 
    <option value="15-16">15-16</option> 
    <option value="17-18">17-18</option> 
    <option value="19 and over">19 and over</option> 
    </select> 
</p> 
<div id="schools" style="display:none"> 
    <p> 
     <label for="schoolName">What school/s do they attend: </label> 
     <input type="text" name="schoolName" /> 
    </p> 
</div> 
+2

定義「不工作」。期望的結果和實際結果是什麼? – BenV 2010-07-20 13:45:24

回答

6

你並不需要一個開關情況:

if(obj.options[obj.selectedIndex].value != "Select one" && obj.options[obj.selectedIndex].value != "0-2"){ 
    document.getElementById('schools').style.display="block"; 
}else{ 
    document.getElementById('schools').style.display="none"; 
} 
+0

「0-2」上的顯示也沒有顯示。 – 2010-07-20 14:00:57

+0

他可能會根據在某個點選擇的選項來做不同的事情。至少,這是我能夠了解所有這些冗餘案例塊的唯一原因。 – 2010-07-20 14:03:39

+0

@Josh:你說得對,我沒有看到那個。你可以添加一個OR語句 @no:無法猜出那個;) – 2010-07-20 14:09:20

0

的情況下的值是錯誤的,他們必須以匹配<option>標籤value,而不是顯示的文本。

所以他們會

case '1': 
    document.getElementById('schools').style.display="block" 
     break;   
    case '2': 
    document.getElementById('schools').style.display="block" 
     break; 

0

從您的代碼,那樣子你會更好切換標準,這樣就隱藏當值""並顯示框在所有其他情況下 - 這看起來像你想要做的......?

除此之外,我不是100%肯定你的問題是什麼,但如果問題是,它不工作的前三個項目,那麼原因是,它們的值會123,不是0-2等,你正在測試。

+0

好吧,它似乎與一個簡單的if語句,如果(curSel ==「是」){...等}其他{...等},但當我試圖實現開關它只是WONT工作,甚至儘管我看不出有什麼問題。 – Odyss3us 2010-07-20 14:10:31

1

選項0-23-56-8value1,分別23。你有他們爲0-23-56-8在你的JavaScript。

+0

哎呀,對不起,這是一個錯字,這不是我在我的文件中。 – Odyss3us 2010-07-20 13:52:31

0

您還沒有switch指定option值,而他們的表現,例如:

case '0-2': 

有沒有像在選擇的選項值。

1

0-2 3-5 6-8

情況下 '0-2': 情況下「3-5 「:

你的價值觀和情況PARAMS不對應。當您選擇「0-2」時,。值爲「1」

0
case '1': 
... 
case '2': 
... 
case '3': 
... 
case '9-11': 
... 
case '12-14': 
... 

即,你應該檢查選項的屬性的內容,而不是文本中的標籤

5

正如其他人說,你case測試沒有匹配的前三個選項的value

我們沒有理由反覆重複那一行document.getElementById('schools').style.display="block";,只是讓所有導致該結果的條件都通過該指令落入單行。

function showHideSchools (obj) { 

    var curSel=obj.options[obj.selectedIndex].value; 

    switch (curSel) { 
    case '2': 
    case '3': 
    case '9-11': 
    case '12-14': 
    case '15-16': 
    case '17-18': 
    case '19 and over': 
     document.getElementById('schools').style.display="block"; 
     break; 
    case '1': 
    default: 
     document.getElementById('schools').style.display="none"; 
    } 

} 
0

只要爲它設置一個jsfildde:http://jsfiddle.net/nHg9t/。這似乎工作正常,據我所見...你可以看看這個,並說如果它做的是正確的事情,如果不是什麼錯,如果是的話,你的測試如何不同...