2011-03-15 80 views
1

我一直在創建一個自定義腳本來幫助管理登錄頁面的祕密問題表單。我試圖使所有單獨的選擇列表變成動態的,因爲如果用戶在一箇中選擇了一個問題,那麼它將不再是剩下的選項,等等。無論如何,我遇到的問題是當我嘗試將其他列表中的變量設置爲空。我目前只使用3個列表,所以我查看一個列表,並在其他2個列表中查找/刪除匹配項。這是我的循環刪除任何匹配。需要將多個數組值設置爲null的幫助 - javascript

for(i=0; i<array1.length; i++) { 
    if(array2[i].value == txtbox1.value) { 
     document.questions.questions2.options[i] = null 
    } 
    if(array3[i].value == txtbox1.value) { 
     document.questions.questions3.options[i] = null 
    } 
} 

如果兩個匹配都位於數組中的相同值/位置,這可以正常工作。但是,如果一個匹配位於array1 [1],另一個匹配位於array3 [7],則只有第一個匹配被刪除,而不是第二個匹配。有什麼我失蹤?任何幫助表示讚賞。謝謝!

+0

確保你正確分號(「;」後的每個「零」),還可以使用「===」進行比較,所以你不要做任何意想不到的類型強制 – Brandon 2011-03-15 23:17:26

回答

0

考慮到每個陣列中的位置可能會有所不同,我並沒有在這裏看到太多的選擇。

做在單獨的迴路,當然,除非你重複在兩個數組的價值觀和共享相同的位置

EDTI我想出了一個簡單的解決方案,它可以工作,創建一個函數。如何才能將數組作爲參數進行復制。

事情是這樣的:

function finder(var array[], var valueToFound, var question) { 
    for (i=0; i<array.lenght; i++) { 
      if (array[i].value == valueToFound) { 
       switch (question) { 
         case 1: document.questions.questions1.options[i] = null; 
           break; 
       } 

       return; 
      } 
    } 
} 

我認爲我做了我的觀點,也許它可以帶你在正確的方向

+0

我以前嘗試過,把它分成兩個for循環,仍然是第一個數組值,但第二個數組仍然保留..另外,我希望能夠在一個循環中完成,只是因爲我最終想添加3個以上的選擇列表,並且每個列表都有一個循環會減慢它的速度...... – Brett 2011-03-15 23:22:51

+0

感謝您的回覆!我沒有想過這樣做,但我會繼續,並把它放進去,看看我能不能讓它工作。我回來後我的結果 – Brett 2011-03-15 23:27:09

+0

@Brett看看我的快速解決方案,它可以幫助你出 – 2011-03-15 23:27:30

0

我敢打賭,該代碼是沒有得到到array3[7],因爲無論它不存在,或者array2太短,你會得到一個JavaScript異常,阻止代碼執行檢查。 array2array3是否可能短於array1

這是更多的代碼,但我會做這樣的:

var selectedvalue == txtbox1.value; 
for(i=0; i<array2.length; i++) { // iterate over the length of array2, not array1 
    if(array2[i].value == selectedvalue) { 
     document.questions.questions2.options[i] = null; 
     break; // found it, move on 
    } 
} 
for(i=0; i<array3.length; i++) { 
    if(array3[i].value == selectedvalue) { 
     document.questions.questions3.options[i] = null; 
     break; // you're done 
    } 
}