2011-09-29 68 views
-3

需要一些幫助,以解決以下javascript問題。我是一個新手,並盡我所能找到一個好的解決方案,所以我可以完成我的論文研究。該代碼旨在在名爲Qualtrics的在線調查計劃中運行。每個var表示來自問題響應的pip數據。我測試了這些,他們工作正常。如果else語句裏面嵌套了switch語句

其中一個開關在if-else語句外正常工作。但是,如果組合起來,事情就不會起作用。

任何幫助非常感謝。

var storeLow = ${q://QID83/ChoiceGroup/SelectedChoices}; 
var storeHigh = ${q://QID82/ChoiceGroup/SelectedChoices}; 
var cash = 0; 
if(storeLow >= 1) 
{ 
switch(storeLow) { 
    case 5: 
    cash = 200; 
    break; 

    case 3: 
    case 6: 
    case 11: 
    case 12: 
    cash = 150; 
    break; 

    case 1: 
    case 2: 
    case 4: 
    case 7: 
    case 8: 
    case 9: 
    case 10: 
    case 13: 
    case 14: 
    case 15: 
    case 16: 
    cash = 100; 
    break; 

    default: 
    cash = 50; 
    break; 
} 
} else { 
switch(storeHigh) { 
    case 3: 
    cash = 200; 
    break; 

    case 6: 
    case 10: 
    case 11: 
    case 15: 
    cash = 150; 
    break; 

    case 1: 
    case 2: 
    case 4: 
    case 5: 
    case 7: 
    case 8: 
    case 9: 
    case 12: 
    case 13: 
    case 14: 
    case 16: 
    cash = 100; 
    break; 

    default: 
    cash = 50; 
    break; 
} 
} 
+1

語法是合理的。定義「不起作用」。 – Alnitak

+1

究竟發生了什麼?什麼「不起作用」?代碼對我來說似乎很好。 – Zecc

+0

順便說一句,你應該把數字順序放在你的'case'中,即使你最終不得不重複分配。這將使它更容易閱讀,國際海事組織。 – Zecc

回答

0

一種更好的方法將使用javascript對象分配現金範圍, 代替使用醜陋的代碼有這麼多的開關情況:

例如。

var myCashCriteria = { '15': 100 , '16' : 100, '17' : 100,'5' : 200 } 
var myCash = getCash(16); 


function getCash(num) 
{ 
    var numKey = num + ''; // convert num to string 
    if(myCashCriteria[numKey]) 
      return myCashCriteria[numKey]; 
    else 
      return 0 ; // default value 
} 
+2

您在示例中使用字符串作爲鍵。它們應該是整數。無論如何,我也會建議使用這種方法,但這更多的只是一個品味問題。另外,不要忘記檢查是否需要設置默認值。 – Zecc

+0

@Zecc,感謝您的輸入,已經更新了答案 – DhruvPathak

+0

其實我忘記了屬性名稱(我稱之爲「鍵」)在JS中總是一個字符串。使用數字索引對象將首先將該數字轉換爲字符串。因此,在你的對象文字中使用引號來實際上更正確。 :) – Zecc

0

我打算在此猜測一下,相信也許你的一個變量實際上是攜帶字符串值而不是整數。嘗試取代:

switch(storeLow) { 

... 

switch(storeHigh) { 

switch(parseInt(storeLow, 10)) { 

... 

switch(parseInt(storeHigh, 10)) { 
+0

非常感謝。我完全忘記了轉換提取變量數據的文本字段條目所需的parseInt()函數。我測試了它並按照原始腳本運行,並進行了以下更改: 更改: var storeLow = $ {q:// QID83/ChoiceGroup/SelectedChoices}; var storeHigh = $ {q:// QID82/ChoiceGroup/SelectedChoices};' 至 var storeLow = parseInt(「$ {q:// QID83/ChoiceGroup/SelectedChoices}」); var storeHigh = parseInt(「$ {q:// QID82/ChoiceGroup/SelectedChoices}」); – Will

+0

@Will a head-up以防萬一:如果您接收到的數字以0(零)開始,那麼它們將被解釋爲如果寫成八進制數,則可能會很好地調用沒有第二個參數的'parseInt',從而產生意外的結果。請參閱[這個其他問題](http://stackoverflow.com/questions/850341/workarounds-for-javascript-parseint-octal-bug)瞭解更多信息。 – Zecc

+0

非常感謝。是的,包裝parseInt()中的變量正在工作。我現在有一個完整的測試版本,它調用java applet,根據解析的變量設置開始的現金值,運行applet,然後完成時從applet獲取一個值並將其放入另一個隱藏的文本字段條目中。這一切都很好,包括調用java applet的輸出。不過,我現在正在測試版本之外進行調試。感謝一個完整的故事:) – Will