验证共享相同名称的输入



我使用如下所述的方法:http://iamcam.wordpress.com/2008/01/15/unchecked-checkbox-values/来获取值,即使复选框未选中,我也不会详细说明为什么需要这样做,但这是必要的。话虽如此……

所有这些很棒的方法都是我自己写的form抽象层的一部分,我有几个复选框我希望通过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)排除隐藏元素验证,即使我认为这种方式它会避免甚至第二个具有相同的名称…)

好的,对您的问题的直接回答是,您可以定义一个自定义验证方法,如本例所示。以下是关键代码:

$.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" },
});

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

也就是说,这里有一个简单的示例,它不使用相同的名称,存储隐藏值,并验证可见复选框。以上的替换为:

jQuery(function($) {
    $('form').validate({
        rules: { "check[legal]": "required" },
    });
    $('#legal').click(function(e) {
        $('#legalHidden').val($(this).attr('checked') ? 1 : 0);
    });
});

在服务器上,您可以简单地引用check[legalhidden],而不需要检查[legal]。在客户端,所有的验证都是在check[legal]上完成的,并且每次单击该值时都会将其复制到legalhidden变量中。

最新更新