2012-07-12 99 views
2

我是JavaScript新手。我正在做一個反饋表單,其中有12個單選按鈕需要單獨驗證,並且當我單擊特定值時將顯示textarea。在這裏,當我點擊那個按鈕時,我的textarea正在顯示,應該被強制輸入(例如:當我在結果問題中單擊失敗選項時,我應該提及他在哪個主題中通過該textarea失敗。類似的東西)。爲此,我編寫了代碼,它在第一個單選按鈕上工作正常,但無法爲其餘按鈕遞歸調用此代碼。調用具有不同變量的遞歸函數

我需要遞歸地調用函數中的這段代碼,但是我的變量需要每次都改變。像第二次,我應該使用選項2,文本2,同樣在下次呼叫選項3,文字3等

var option = $("#form1 input[@name=radio1]:checked").val(); 
var text = document.getElementById("text1").value; 

if (!$("#form1 input[@name=radio1]:checked").val()) { 
    alert("Please fill all the fields"); 
    return false; 
    errs++; 
} else if (option == "3" && trim(text) == "") { 
    alert("Please enter comments."); 

    return false; 

} 

需要被調用VAR選項1至option10和同一文本1至text10這段代碼。像:

var option2 = $("#form1 input[@name=radio2]:checked").val(); 
var text2 = document.getElementById("text2").value; 

這應該被立即調用完成第一個單選按鈕。

請幫我一把。

+0

表現出一定的HTML代碼了。 – Yoshi 2012-07-12 14:56:52

+1

你確定你需要遞歸嗎?這看起來更像是一個相同級別的迭代任務。在單選按鈕元素上使用.each(),並使用.index()引用其在同胞中的位置。或者您可以使用遞歸併使用.next()來獲取DOM中的下一個兄弟。 – Onheiron 2012-07-12 15:01:05

+1

*在調用'return false;'之後,您不能調用errs ++'*。 – 2012-07-12 15:02:01

回答

3

「遞歸」在這裏是錯誤的詞。你只是想循環所有的元素。

獲取所有無線電,並循環播放它們。然後獲取ID以及與該ID相關聯的所有字段。

我假設你正在使用jQuery,所以這裏有一個例子:

// Note: The "@" is not needed in jQuery 
var radios = $("#form1 input[name^='radio']"); // "^=" means "starts with" 
radios.each(function(){ 
    var id = this.name.replace('radio', ''); // this will get the number, eg: 1 
    var option = $(this).val(); // get radio's value 
    var text = $('#text'+id).val(); // get textX's value 

    if(!$(this).is(':checked')){ // check if radio is checked 
     alert("Please fill all the fields"); 
     errs++; // make sure to do this before "return false" 
     return false; // break the .each loop 
    } 
    else if (option == "3" && trim(text) == "") { 
     alert("Please enter comments."); 
     return false; 
    } 
}); 
+1

+1寫得很好,會讓它完全一樣 – 2012-07-12 15:34:27