2012-10-29 194 views
1

我有一個複選框包含在我的頁面上的表單。當用戶點擊一個按鈕時,我需要找出複選框中的哪些項目已被選中。在Javascript中使用變量for循環

我可以得到這個與以下代碼一起工作,沒有任何問題。

for (i=0; i < Form3.CBox1.length; i++) 
    if (Form3.CBox1[i].checked) 
    { 
    Answer = Answer + Form3.CBox1[i].value + ","; 
    } 
alert(Answer); 

我的問題是,我打電話給我的頁面上的上述功能幾次,我想在變量而不是硬編碼的形式和複選框的名字來傳遞。每次我做這個Javascript都不會返回任何東西。在下面的代碼中,變量vCurrForm & vCurrCBox已經在另一個函數中被設置得更早了,並且我已經過測試以確保它們被正確設置,但是我仍然無法讓這段代碼正常工作。

for (i=0; i < vCurrForm.vCurrCBox.length; i++) 
    if (vCurrForm.vCurrCBox[i].checked) 
    { 
    Answer = Answer + vCurrForm.vCurrCBox[i].value + ","; 
    } 
alert(Answer); 

任何幫助將不勝感激。由於

回答

1

當變量的關鍵對象的工作,你需要使用數組語法(即[]秒),其自身將在此給我們(仍然打破)代碼:

for (i=0; i < vCurrForm[vCurrCBox].length; i++) 
{ 
    if (vCurrForm[vCurrCBox][i].checked) 
    { 
     Answer = Answer + vCurrForm[vCurrCBox][i].value + ","; 
    } 
} 
alert(Answer); 

問題是,vCurrForm仍然被當作一個普通的舊變量,即使它是該變量的字符串名稱。正因爲如此,你需要從它的父母引用它; window

for (i=0; i < window[vCurrForm][vCurrCBox].length; i++) 
{ 
    if (window[vCurrForm][vCurrCBox][i].checked) 
    { 
     Answer = Answer + window[vCurrForm][vCurrCBox][i].value + ","; 
    } 
} 
alert(Answer); 
0

沒有看到你是如何聲明和設置這些值是非常難以確定的問題。它可能與要設置變量的對象類型或其範圍有關。這裏有一些事情來檢查:

  1. 確保變量vCurrForm.vCurrCBox是一個數組。
  2. 確保vCurrForm和vCurrCBox在被調用的函數可訪問的範圍內聲明。
  3. 在這種情況下,請確保您將vCurrForm設置爲Form對象,並將vCurrCBox設置爲複選框控件數組。

查看提供的代碼幾乎讓我認爲被引用的變量是針對單個項目(Current Checkbox)的。在這種情況下,你可能不會得到你正在尋找的結果。

如果可能的話,要考慮的其他事情是使用JQuery來更容易地抓住選中的框並連接它們的值。 jQuery中你的代碼可以與像做:

var Answers = ""; 
$("input[type='checkbox']:checked").each(function() { Answers += $(this).val() + ", "; }); 
+0

只是一個快速註上了「讓我覺得,被引用的變量是一個單一的項目」 - 複選框是選中所有複選框共享集合的給定'姓名'屬性 – Joe

+0

@Joe,在海報的樣本中很難看到。可以設置一個等於上游對象集合的變量,並像控制器​​一樣操作它們。再次,沒有看到設置變量的代碼,我們都只是在進行有根據的猜測。數據類型以及在這種情況下如何設置可以使所有不同。 – CSharpConductor

+0

當然,有可能叫做'vCurrForm'的變量沒有直接映射到一個表單,並且可能'vCurrCBox'不會映射到它內部的CheckBox集合,但它可能是**安全的假設:)當然,很容易說「但它仍然是可能的!」但真的,退一步,只是把常識帽子放一會:P – Joe

0

或者,更好的解決方案是通過引用包含元素的數組,而不是用字符串匹配它。例如:

function getAnswers(items) { 
    for (var i = 0; i < items.length; i++) 
    { 
     if (items[i].checked) { 
      Answer = Answer + items[i].value + ","; 
     } 
    } 
} 
0

非常感謝您的幫助。我看到了我的方式的錯誤。

以下爲我工作

**for (i=0; i < document[vCurrForm][vCurrCBox].length; i++) 
    if (document[vCurrForm][vCurrCBox][i].checked) 
       { 
     Answer = Answer + document[vCurrForm][vCurrCBox][i].value + ","; 
     }**