验证共享相同名称的输入

时间:2011-11-15 16:05:06

标签: jquery jquery-validate

我正在使用此处所述的方法:http://iamcam.wordpress.com/2008/01/15/unchecked-checkbox-values/即使未选中此复选框也可获取值,我不会详细了解我为什么需要此功能但是它&#39是必要的那就是说..

所有这些精彩的方法都是我自己编写的表单抽象层的一部分,我有几个复选框,我希望通过jquery验证来验证,问题是html是这样的:

<input class="" type="hidden" value="0" name="check[legal]">
<input id="legal" class="required" type="checkbox" name="check[legal]" value="1">

jquery validate会验证两者的第一个输入(因为它们具有相同的名称)。 我明白我可以简单地删除第一个并完成它,我只是想知道是否有任何方法来验证第二个复选框,保留所有内容(我可以在这里看到两条路:1)从id验证输入2)从验证中排除隐藏的元素,即使我认为这样也会避免第二个具有相同的名称..)

1 个答案:

答案 0 :(得分:3)

好的,您问题的直接答案是您可以将自定义验证方法定义为shown in this example。这是关键代码:

$.validator.methods.checkLegal = function(value, element) {
    return $('input[type=checkbox][name="check[legal]"]').attr('checked');
}

$('form').validate({
    rules: { "check[legal]": {checkLegal: true} },
    messages: { "check[legal]": "You must check the box" },
});

但是,您的字段不需要具有相同的名称即可使用您提供的链接中描述的原则。事实上,如果你不这样做,它会大大简化。如果这不是一个复选框列表,还不清楚为什么你需要变量名中的大括号。

也就是说,here is a simple example不使用相同的名称,存储隐藏的值,并验证可见的复选框。以上的替代是:

jQuery(function($) {
    $('form').validate({
        rules: { "check[legal]": "required" },
    });

    $('#legal').click(function(e) {
        $('#legalHidden').val($(this).attr('checked') ? 1 : 0);
    });

});

在服务器上,您只需参考检查[legalhidden]而不用检查[legal]。在客户端上,所有验证都在check [legal]上完成,每次点击时都会将值复制到legalhidden var中。