jquery验证插件规则有条件吗?

时间:2013-10-07 09:19:18

标签: javascript jquery jquery-validate

我正在使用Jquery验证插件,我有一个带有“保存”,“提交”按钮的大表单。 我有两组按钮规则。

  1. 每当用户点击保存按钮时,只有有效规则的一套规则(必填字段电子邮件,密码)。
  2. 每当用户点击保存按钮时,只有有效规则两套规则(所有必填字段)。
  3. 任何人都建议,如何发展这样?

    Set1规则:

    var rulesOne = { email : "required" .......}
    

    Set2规则:

    var rulesTwo = {city : "required" ..........}
    
    $("#form1").validate({
    ignore : '*:not([name]),:hidden',
    rules : rules});
    

    如果保存按钮

    if(this.id == "personal_save"){
      setOne rules test ?
    else
    // submit button (check all validations)
    {
      setTwo rules test ?
    }
    

    由于 普拉萨德

2 个答案:

答案 0 :(得分:2)

使用此插件无法为表单的任何/所有部分动态启用/关闭验证。

但是,您可以随时使用the .rules() method动态添加,删除或覆盖规则,从而为您提供类似的行为。

然后您可以使用the .valid() method来测试表单。

将它们分别放在专用的click事件处理程序中。

$(document).ready(function() {

    // initialize the plugin
    $("#form1").validate({
        ignore : '*:not([name]),:hidden'
        // no rules; rules are set dynamically below
    });

    // Save Button
    $('#save_button').on('click', function() {

        // dynamically set the rules
        $('input[name="email"]').rules('add', {
            required: true,
            ....
        });

        // remove all rules from the other fields
        $('input[name="city"]').rules('remove');

        // force a test of the form
        $("#form1").valid();

    });

    // Submit Button
    $('#submit_button').on('click', function() {

        // dynamically set the rules
        $('input[name="city"]').rules('add', {
            required: true,
            ....
        });

        // remove all rules from the other fields
        $('input[name="email"]').rules('remove');

        // force a test of the form
        $("#form1").valid();

    });

});

概念证明DEMO:http://jsfiddle.net/x6YWM/


如果您有多个字段,可以通过在.ruleset1.ruleset2上设置适当的类来简化这些操作。然后,您可以使用.rules()方法将它们定位为一个组。请记住,如果选择器针对多个元素,则需要将它们包含在jQuery .each()中...

$('.ruleset1').each(function() {  // target multiple elements
    $(this).rules('add', {        // apply the rules to each
        required: true,
        ....
    });
});

答案 1 :(得分:0)

我遇到了同样的问题,经过大量的研究,我找到了解决方案。它包括使用JQuery.extend替换验证器设置中的rules属性。 我创建了一个基于@Sparky的jsfiddle。 http://jsfiddle.net/rWsLy/

 $('#save_button').on('click', function () {

var settings = $("#form1").validate().settings;

    // Modify validation settings
    $.extend(settings, {
        rules: {
            field1: {
                required: true,
            },
        },
    });

    // force a test of the form
    $("#form1").valid();

});

我更喜欢这种方式,因为规则的指定方式与validate方法相同。我认为,以前的解决方案不会扩展。