2012-11-21 58 views
0

我有3组的问题一个HTML表单,用户可以回答yes或no来如下:条件表单验证

A1 A2 A3 A4 A5

OR

B1 B2 B3

C1 C2 C3 C4 C5 C6

用户可以选择接听要么所有的“A”的问题,所有的“B”的问题或所有的“C”的问题,但它们不能回答一个以上的组。无论选择哪一组,他们都必须回答同一组中的所有问题(即所有“A”或所有“B”或所有“C”问题 - 他们不能回答问题)。

这里的窗体的HTML:

<form method="post" action="process.php" id='editRecord'> 

       <table border="1" class="record"> 
       <tr> 
       <td width="88%" valign="top" class="field_name_left">A1</td> 
       <td width="12%" valign="top" class="field_data">   
          <input type="radio" name="CriteriaA1" value="Yes">Yes<input type="radio" name="CriteriaA1" value="No">No</td> 
       </tr> 
       <tr> 
       <td width="88%" valign="top" class="field_name_left">A2</td> 
       <td valign="top" class="field_data"> 
          <input type="radio" name="CriteriaA2" value="Yes">Yes<input type="radio" name="CriteriaA2" value="No">No</td> 
       </tr> 
       <tr> 
       <td width="88%" valign="top" class="field_name_left">A3</td> 
       <td valign="top" class="field_data">      <input type="radio" name="CriteriaA3" value="Yes">Yes<input type="radio" name="CriteriaA3" value="No">No</td> 
       </tr> 
       <tr> 
       <td width="88%" valign="top" class="field_name_left">A4</td> 
       <td valign="top" class="field_data"> 
          <input type="radio" name="CriteriaA4" value="Yes">Yes<input type="radio" name="CriteriaA4" value="No">No</td> 
       </tr> 
       <tr> 
       <td width="88%" valign="top" class="field_name_left">A5</td> 
       <td valign="top" class="field_data"> 
          <input type="radio" name="CriteriaA5" value="Yes">Yes<input type="radio" name="CriteriaA5" value="No">No</td> 
       </tr> 
       <tr> 
       <td valign="top" class="field_name_left" colspan="2">&nbsp;</td> 
       </tr> 
       <tr> 
       <td valign="top" class="field_name_left" colspan="2"><strong>OR</strong></td> 
       </tr> 
       <tr> 
       <td valign="top" class="field_name_left" colspan="2">&nbsp;</td> 
       </tr> 
       <tr> 
       <td valign="top" class="field_name_left">B1</td> 
       <td valign="top" class="field_data"> 
          <input type="radio" name="CriteriaB1" value="Yes">Yes<input type="radio" name="CriteriaB1" value="No">No</td> 
       </tr> 
       <tr> 
       <td valign="top" class="field_name_left">B2</td> 
       <td valign="top" class="field_data"> 
          <input type="radio" name="CriteriaB2" value="Yes">Yes<input type="radio" name="CriteriaB2" value="No">No</td> 
       </tr> 
       <tr> 
       <td valign="top" class="field_name_left">B3</td> 
       <td valign="top" class="field_data"> 
          <input type="radio" name="CriteriaB3" value="Yes">Yes<input type="radio" name="CriteriaB3" value="No">No</td> 
      </tr> 
      <tr> 
       <td valign="top" class="field_name_left" colspan="2">&nbsp;</td> 
       </tr> 
       <tr> 
       <td valign="top" class="field_name_left" colspan="2"><strong>OR</strong></td> 
       </tr> 
       <tr> 
       <td valign="top" class="field_name_left" colspan="2">&nbsp;</td> 
       </tr> 
       <tr> 
       <td width="88%" valign="top" class="field_name_left">C1</td> 
       <td width="12%" valign="top" class="field_data">   
          <input type="radio" name="CriteriaC1" value="Yes">Yes<input type="radio" name="CriteriaC1" value="No">No</td> 
       </tr> 
       <tr> 
       <td width="88%" valign="top" class="field_name_left">C2</td> 
       <td valign="top" class="field_data"> 
          <input type="radio" name="CriteriaC2" value="Yes">Yes<input type="radio" name="CriteriaC2" value="No">No</td> 
       </tr> 
       <tr> 
       <td width="88%" valign="top" class="field_name_left">C3</td> 
       <td valign="top" class="field_data"> 
          <input type="radio" name="CriteriaC3" value="Yes">Yes<input type="radio" name="CriteriaC3" value="No">No</td> 
       </tr> 
       <tr> 
       <td width="88%" valign="top" class="field_name_left">C4</td> 
       <td valign="top" class="field_data"> 
          <input type="radio" name="CriteriaC4" value="Yes">Yes<input type="radio" name="CriteriaC4" value="No">No</td> 
       </tr> 
       <tr> 
       <td width="88%" valign="top" class="field_name_left">C5</td> 
       <td valign="top" class="field_data"> 
          <input type="radio" name="CriteriaC5" value="Yes">Yes<input type="radio" name="CriteriaC5" value="No">No</td> 
       </tr> 
       <tr> 
       <td width="88%" valign="top" class="field_name_left">C6</td> 
       <td valign="top" class="field_data"> 
          <input type="radio" name="CriteriaC6" value="Yes">Yes<input type="radio" name="CriteriaC6" value="No">No</td> 
       </tr> 

       <tr class="submit_btn"> 
       <td colspan="3">&nbsp;</td> 
       </tr> 
       <tr class="submit_btn"> 
       <td colspan="3"> 
        <div id="buttons" > 
         <input type="submit" name="-edit" value="Continue"> 
         <input type="reset" name="reset" value="Reset"> 
        </div>    
        <div id="error"></div>   </td> 
      </tr> 
     </table> 
    </form>​ 

我还设置一个的jsfiddle在:

http://jsfiddle.net/fmdataweb/pEETU/2/

我想补充一些客户端验证检查,当用户点击继续按钮,他们确实回答了一个组中的所有问题,并没有回答其他组的任何问题。

我以前有过这种验证,当表单只有A或B选项 - 表单现在有C选项,我需要更新Javascript,但我迄今尝试过的一切都失败了。

下面是对原来的A和B选项工作的JavaScript:

$(function() { 

     $("#editRecord").submit(function(){ 

     // is anything checked? 
     if(!checkEmpty()){ 
      $("#error").html("Please check something before submitting"); 
      //alert("nothing Checked"); 
      return false; 
     } 
     // Only A _OR_ B 
     if(isAorB()){ 
      $("#error").html("Please complete A or B, not both"); 
      //alert("please complete A or B, not both"); 
      return false; 
     }; 
     // all A's or all B's 
     if(allAorBChecked()){ 
      $("#error").html("It appears you have not completed all questions"); 
      //alert("missing data"); 
      return false; 
     }; 
     if(haveNo()){ 
      // we're going on, but sending "type = C" 
     } 
     //alert("all OK"); 
      return true; 
     }); 
    }); 


function checkEmpty(){ 
    var OK = false; 
    $(":radio").each(function(){ 
     if (this.checked){ 
      OK = true; 
     } 
    }); 
    return OK; 
} 
function isAorB(){ 
    var OK = false; 
    var Achecked = false; 
    var Bchecked = false; 
    $(":radio").each(function(){ 
     var theChar=this.name.charAt(8); 
     // if we have an A checked remember it 
     if(theChar == "A" && this.checked && !Achecked){ 
      Achecked = true;  
     } 
     if(Achecked && theChar == "B" && !Bchecked){ 
      if(this.checked){ 
       Bchecked = true; 
      } 
     } 
     if (Achecked && Bchecked){ 
      OK = true; 
     } 
    }); 
    return OK; 
} 
function allAorBChecked(){ 
    var notOK = false; 
    var Achecked = false; 
    $(":radio").each(function(){ 
     // skip through to see if we're doing A's or B's 
    var theChar=this.name.charAt(8); 
     // check the A's 
    if(theChar == "A" && this.checked && !Achecked){ 
      Achecked = true;  
     } 

    }); 
    if(Achecked){ 
     // set the input to A 
     $("#type").val("A"); 
     // check _all_ a's are checked 
     var thisName; 
     var thisChecked = false; 

     $(":radio").each(function(){ 
      var theChar=this.name.charAt(8); 
      var checked = this.checked; 
      if (theChar == "A"){ 
      if (this.name == thisName && !thisChecked){ 
       // Yes wasn't checked - is No? 
       if(!checked){ 
        notOK = true; 
       } 
      } 
      thisChecked = checked; 
      thisName = this.name; 
     } 
    }); 
    }else{ 
     // set the input to B 
     $("#type").val("B");    
     // check _all_ b's are checked 
      var thisName; 
      var thisChecked = false; 
      $(":radio").each(function(){ 
       var theChar=this.name.charAt(8); 
       var checked = this.checked; 
       if (theChar == "B"){ 
       if (this.name == thisName && !thisChecked){ 
        // A wasn't checked - is B? 
        if(!checked){ 
         notOK = true; 
        } 
       } 
       thisChecked = checked; 
       thisName = this.name; 
      } 
     }); 
    } 
    return notOK; 
}  
function haveNo(){ 
    var thisName; 
    var notOK = false; 
     $(":radio").each(function(){ 
      var checked = this.checked; 
      if (this.name == thisName){ 
       //Is this checked 
       if(checked){ 
        notOK = true; 
        $("#type").val("C");    
       } 

     } 
     thisName = this.name; 
    }); 

    return notOK; 
} 

+3

它可以轻松地用jQuery来完成,而验证插件不是必须的。我建议你至少尝试解决方案,然后或许有人会帮助解决疑惑。 不要指望人们为你编写完整的代码。 – 5hahiL

+0

你可能不应该把你的表格放在这样的表格中。你的表单没有填充表格数据,称它是一个糟糕的语义。 –

+0

我与沙希尔一起,自己写点东西然后问。至少尝试一下...我会用jQuery,不是那么复杂。 – Alvaro

回答

0

使用最优秀的jQuery验证插件http://docs.jquery.com/Plugins/Validation可以用“依赖”,使场只需要等时标准得到满足。

要确保只填写了一组字段,只需单击一下,就可以使其他字段不可见(并以编程方式清空任何值)。我看到的问题是,当某人开始点击单选按钮,然后决定他们要填写b数据时......他们将如何删除A中的所有单选按钮?