2013-10-30 109 views
1

我有下面的代碼,我想凝聚成for循環但不知道如何。我試着看着其他帖子,但卡住了。使用for循環來濃縮代碼

有15個號碼都在一起所以像爲(i = 1;我< = 15;我++)

 if(checksquare1save=="true"){ 
      $("#checksquare1").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare1").removeClass("checksquareON"); 
     } 

     if(checksquare2save=="true"){ 
      $("#checksquare2").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare2").removeClass("checksquareON"); 
     } 

     if(checksquare3save=="true"){ 
      $("#checksquare3").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare3").removeClass("checksquareON"); 
     } 

     if(checksquare4save=="true"){ 
      $("#checksquare4").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare4").removeClass("checksquareON"); 
     } 

     if(checksquare5save=="true"){ 
      $("#checksquare5").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare5").removeClass("checksquareON"); 
     } 

     if(checksquare6save=="true"){ 
      $("#checksquare6").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare6").removeClass("checksquareON"); 
     } 

     if(checksquare7save=="true"){ 
      $("#checksquare7").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare7").removeClass("checksquareON"); 
     } 

     if(checksquare8save=="true"){ 
      $("#checksquare8").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare8").removeClass("checksquareON"); 
     } 

     if(checksquare9save=="true"){ 
      $("#checksquare9").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare9").removeClass("checksquareON"); 
     } 

     if(checksquare10save=="true"){ 
      $("#checksquare10").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare10").removeClass("checksquareON"); 
     } 

     if(checksquare11save=="true"){ 
      $("#checksquare11").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare11").removeClass("checksquareON"); 
     } 

     if(checksquare12save=="true"){ 
      $("#checksquare12").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare12").removeClass("checksquareON"); 
     } 

     if(checksquare13save=="true"){ 
      $("#checksquare13").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare13").removeClass("checksquareON"); 
     } 


     if(checksquare14save=="true"){ 
      $("#checksquare14").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare14").removeClass("checksquareON"); 
     } 

     if(checksquare15save=="true"){ 
      $("#checksquare15").toggleClass("checksquareON"); 
     } 

     else{ 
      $("#checksquare15").removeClass("checksquareON"); 
     } 

我曾嘗試這一點,但沒有奏效

 for (i = 1; i <= 15; i++){ 
      if(checksquare + i + save=="true"){ 
       $("#checksquare" + i).toggleClass("checksquareON"); 
      } 
     } 

編輯:

應該提到我以上

 checksquare1save = localStorage['ScienceSkills-basicSkillsCheck-check1-7868-2171-1085-5119-4672'] 
     checksquare2save = localStorage['ScienceSkills-basicSkillsCheck-check2-6582-7209-6435-8487-6994'] 
     checksquare3save = localStorage['ScienceSkills-basicSkillsCheck-check3-5367-9000-3502-5810-2295'] 
     checksquare4save = localStorage['ScienceSkills-basicSkillsCheck-check4-2961-8359-5106-2702-5132'] 
     checksquare5save = localStorage['ScienceSkills-basicSkillsCheck-check5-5801-5256-5838-2934-5277'] 
     checksquare6save = localStorage['ScienceSkills-basicSkillsCheck-check6-1162-2208-7274-5156-3693'] 
     checksquare7save = localStorage['ScienceSkills-basicSkillsCheck-check7-6178-4335-3148-1809-8066'] 
     checksquare8save = localStorage['ScienceSkills-basicSkillsCheck-check8-6609-6032-4539-4243-6273'] 
     checksquare9save = localStorage['ScienceSkills-basicSkillsCheck-check9-6261-3580-7658-7073-1914'] 
     checksquare10save = localStorage['ScienceSkills-basicSkillsCheck-check10-1504-7246-1864-4465-1319'] 
     checksquare11save = localStorage['ScienceSkills-basicSkillsCheck-check11-6400-3954-7124-3585-2086'] 
     checksquare12save = localStorage['ScienceSkills-basicSkillsCheck-check12-8303-8392-7301-5154-8007'] 
     checksquare13save = localStorage['ScienceSkills-basicSkillsCheck-check13-1207-8834-5941-3315-8893'] 
     checksquare14save = localStorage['ScienceSkills-basicSkillsCheck-check14-3089-4036-1427-2614-7399'] 
     checksquare15save = localStorage['ScienceSkills-basicSkillsCheck-check15-2750-4976-5357-6403-2979'] 
這些瓦爾
+2

'如果(checksquare + I +保存== 「真」){'我認爲錯在這裏 – roullie

+1

將checksquareXsave變量設置爲數組。更容易得到它的價值,因爲你可以只做checksquaresave [i] –

+0

你能舉起小提琴嗎? –

回答

5

這應該工作,如果你的變量是在全球範圍內:

for (i = 1; i <= 15; i++){ 
     if(window['checksquare' + i + 'save']=="true"){ 
      $("#checksquare" + i).toggleClass("checksquareON"); 
     } 
     else{ 
      $("#checksquare" + i).removeClass("checksquareON"); 
     } 
    } 
+0

編輯我原來的帖子與我使用的陣列,如果有幫助 – craig

+0

窗口和括號之間的'.'導致語法錯誤。刪除它,它會很好。 :) –

+0

仍然沒有真正告訴我它是否在全球範圍內,但我認爲它應該工作。 –

1

您現在正在執行的代碼將檢查3個變量的值: checksquare,i &保存,而不是一個。

一種方式是將所有的數據放在一個數組中,並通過它。

如果你有一個數組:checksquaresave。那麼你可以與你的價值觀填補它:

checksquaresave[0] =value0, checksquaresave[1] =value1 , ... 

在此之後的代碼將是簡單的:

for (i = 1; i <= 15; i++){ 
    if(checksquaresave[i] =="true"){ 
     $("#checksquare" + i).toggleClass("checksquareON"); 
    } 
} 

編輯:爲@Archer提到的(以及其他答案爲好吧)你可以使用

window["checksquare" + i + "save"] 

以及,但我認爲最好的辦法是隻需使用一個數組。 (cfr using window["variable" + i] in javascript

+0

是的,你可以......'window [「checksquare」+ i +「save」]',但我同意數組會更好;) – Archer

+0

啊不知道!這可能不是最好的做法嗎? (性能明智) –

+1

我會說這不是最佳實踐,沒有給出理由。這只是一種令人不快的編碼方式,也是我們擁有數組的原因!但是,仍然很方便知道。 – Archer

4

你最好使用一個數組checksquaresave,並推入它所有的checksquareXsave然後像你在做循環陣列。它需要一些重構,但稍後會爲你節省一些痛苦。

for (i = 1; i <= 15; i++){ 
    if(checksquare[i] == 'true'){ 
     $("#checksquare" + i).toggleClass("checksquareON"); 
    } 
} 
1

表明你的代碼,我能想到的唯一解決方案包括使用eval 。忘記我說過,因爲你不想嘗試這個解決方案。有15個類似命名的變量可能是一個問題。如果「checksquaresave」變量是全局變量,您可以使用window.variableNamewindow["variableName"]來檢索它們。在這種情況下,它看起來像:

if (window["checksquare" + i + "save"] == "true") 

否則,將是很好的檢查checksquare創建##保存變量,將它們設置爲一個數組,而不是獨立變量。然後,你的代碼看起來是這樣的:

1

如果你想只在運行時訪問,而您知道這個名字的變量,可以將它們存儲爲一個對象的屬性。

所以,如果你想訪問checksquare1save,checksquare2save,等等,你可以這樣做:

var storage = { 
    checksquare0save:true, 
    checksquare1save:true, 
    checksquare2save:false, 
    //...other variables... 
} 

for (var i = 0; i < 15, i++) { 
    console.log(storage["checksquare" + i + "save"]) 
}