JQuery Validator插件验证条件

时间:2015-06-07 00:08:09

标签: javascript jquery validation

我在使用验证器插件完全验证我的数据时遇到了一些问题 我有2个领域; fieldOne和fieldTwo。然后我有2个PHP文件,process.php和processfailed.php。

现在我有很多条件。

如果fieldOne和fieldTwo都是空的,我希望错误显示给用户但没有调用PHP文件。

如果其中一个字段有有效数据,而另一个字段有无效数据或为空,我希望它调用process.php(我不希望发生验证错误事件)。

只有当两个字段都有无效数据时,才能从验证错误事件中调用processfailed.php。

我到目前为止的代码是这个(删除了一些部分以缩短它)

var validator = $("#my_form").validate({
    rules: {
        fieldOne: {
            require_from_group: [1, '.datagroup'],
            maxlength: 40
        },
        fieldTwo: {
            require_from_group: [1, '.datagroup'],
            minlength: 8
        }
    },
    groups: {
        datagroup: "fieldOne fieldTwo"
    },
    submitHandler: function (form) {
        $.ajax({
            type: "POST",
            url: "process.php",
            data: {
                'fieldOne': $("#fieldOne").val(),
                'fieldTwo': $("#fieldTwo").val()
            }
        })
        return false;
    },
    invalidHandler: function (form, validator) {
        /* Submit the form even if validation fails: */
        $.ajax({
            type: "POST",
            url: "processfailed.php",
            data: {
                'fieldOne': $("#fieldOne").val(),
                'fieldTwo': $("#fieldTwo").val()
            }
        })
        return false;
    }
});

关于它们都是空的,此刻它向用户显示错误,但它似乎也调用processfailed.php(我不希望在这种情况下调用任何php文件)。

如果我将有效数据提供给一个字段并将另一个字段留空,这似乎有效。

如果我将有效数据提供给一个字段并将无效数据提供给另一个字段,那么当它应该调用process.php时,这似乎调用processfailed.php(只要一个字段有效即可)。

如果我向两个字段提供无效数据(它们都验证失败),似乎应该调用processfailed.php。

那么如何处理两个字段为空(不调用任何php文件),如果一个字段有效而另一个字段无效则调用process.php而不是processfailed.php。

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

对于两个字段都为空的第一个条件,您只需在invalidHandler方法中放置一个if语句。

为了在另一个字段有效时不对其中一个字段应用验证,您可以使用规则的depends属性。

$("#my_form").validate({
    rules: {
        fieldOne: {
            require_from_group: [1, '.datagroup'],
            maxlength: {
                param: 2,
                depends: function(element) {
                    var valTwo = $('#fieldTwo').val();
                    return !valTwo || (valTwo.length < 8);
                }
            }
        },
        fieldTwo: {
            require_from_group: [1, '.datagroup'],
            minlength: {
                param: 8,
                depends: function(element) {
                    var valOne = $('#fieldOne').val();
                    return !valOne || (valOne.length > 2);
                }                
            }
        }
    },
    submitHandler: function (form) {
        alert("process");
        return false;
    },
    invalidHandler: function (event, validator) {
        if ($('#fieldOne').val() || $('#fieldTwo').val()) {
            alert('processfailed');
        } else {
            alert('empty');
        }
        return false;
    }
});

jsfiddle

我删除了groups属性,因为它会导致所有邮件显示在第一个字段旁边,当邮件因为第二个字段违反minlength规则时,这看起来不正确

注意:invalidHandler函数的第一个参数是事件对象,而不是表单元素,但您可以使用event.target获取表单元素。