2011-08-29 47 views
0

我有一個表單中的問題,詢問您是否使用過酒精,毒品,「Both」,「777」,「999」。javascript for ... in + if-test(在表單內部的一個開關內部)

alcohol:question 2;毒品:問題3;兩個:問題2 + 3;既不或「777」或「999」:問題4.

我有一個jQuery的變化()聽設定(和工作),我有一個switch語句設置和大部分工作,除了neither||"777"||"999"。在case "neither…"內部,我有一個數組vices和一個for…in循環。我的假設是for…in的功能類似於php的foreach

我需要檢測,如果問題是已經inactive之前,我隱藏它,並將其值設置爲不適用(所以我知道這是有目的的,而不是留空)。

case "neither" || "777" || "999": 
    var vices = new Array('alcohol','drugs'); 
    for (vice in vices) { 
     if ($("ul#vice").hasClass("inactive") == false) { 
      $("ul#vice").append('<input name="'+vice+'" type="radio" value="not applicable" checked="checked" />'); 
      $("ul#vice").delay(250).queue(function() {$(this).addClass("inactive");queue()}); 
     } 
    } 

我認爲這個問題與$("ul#vice")有關,但我不確定。 (我試過$("ul#"+vice),但那也沒有效果)。

一個問題的東西看起來像:

.inactive{display:none; z-index:-5} 

<ul id="alcohol" class="inactive">How many alcoholic drinks do you have? 
    <li><input name="alcohol" type="text" maxlength="2" /><span id="alcohol" class="inactive"></span></li> 
    <li><input name="alcohol" type="radio" value="777" />Don't know</li> 
    <li><input name="alcohol" type="radio" value="999" />Prefer to not answer</li> 
    <input name="alcohol" type="radio" value="not applicable" checked="checked" /> 
</ul> 

提前感謝!

+0

好吧,快速搜索會告訴你'for ... in'實際上是如何工作的:http://www.w3schools.com/js/js_loop_for_in.asp – Blazemonger

回答

1

好,快速搜索會告訴你怎麼了......在實際做的工作:http://w3schools.com/js/js_loop_for_in.asp

您需要:

for (i=0; i<vices.length; i++) { 
    var vice = vices[i]; ... 
} 

而且因爲這是一個變量,$("ul#" + vice)其實正確。

+0

是的!那工作。 (我不喜歡這個循環的結構 - 我更喜歡PHP的'foreach')謝謝! – jacob

2

你是不正確的在你的假設for...in類似於foreach ...

我以前的答案。 JavaScript Loops: for...in vs for

+0

因此'for ... in'返回一個數字,就像3如果它是數組中的第三個對象? (似乎幾乎沒用)。謝謝(你的)信息! – jacob

+0

它只是一個縮短的sytax,但正如我指出的那樣,它通常更適合多種原因使用常規「for」 – jondavidjohn