2013-08-06 57 views
0

我有以下的形式,我想与JQuery验证插件来验证:jQuery验证字段阵列之间的依赖关系

<div class="group"> 
    <input type="checkbox" name="prod[]" value="1"> 
    <input type="text" name="quantity[]" value="1"> 
</div> 
<div class="group"> 
    <input type="checkbox" name="prod[]" value="2"> 
    <input type="text" name="quantity[]" value="1"> 
</div> 
<div class="group"> 
    <input type="checkbox" name="prod[]" value="3"> 
    <input type="text" name="quantity[]" value="1"> 
</div> 

...等

我的问题是,必须按规定的数量字段olny当相对复选框被选中时。 为了验证我写了下面的代码(但它不工作)

rules: { 
    "prod[]": { //ok it works! 
     required: true, 
     minlength: 1 
    }, 
    "quant[]": { //not works 
     required: { 
     depends: function(element) { 
      var v = $(this).parent().find('input[type=checkbox]').is(':checked'); 
      return v; 
     } 
    } 
},... 

我怎样才能做到这一点? 谢谢..

回答

0

你是在正确的轨道上,但你刚刚犯了一个小错误。依赖性调用的上下文不是有问题的元素,而是别的。因此,你不能引用this你要看功能,而不是引用element

$(element).parent().find('input[type=checkbox]').is(':checked'); 

就是这样,之后,将工作。你也不需要使它成为依赖函数我不认为,所需的选项也可以是一个函数:

required: function(element){ 
    return $(element).parent().find('input[type=checkbox]').is(':checked'); 
} 
+0

好的!现在它工作!非常感谢你! – Gambric

+0

现在最后一个问题是错误标签总是附加到字段数组的第一个元素。事实上,例如,如果在最后一组中出现编译错误,通知将显示在第一组中。为什么? – Gambric

+0

验证是通过每个输入的'name'属性进行的,因此尽管您将它们分组为一个,但逻辑上,所有'prod []'元素都是相同的“组”。无论如何,要解决您的问题,您需要添加一个'errorPlacement'选项来验证,然后将错误标签放置在那里。 – Ryley