2012-07-12 42 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