在使用jquery validate提交之前比较值

时间:2015-01-09 06:50:27

标签: jquery forms validation

我使用jquery.validate.js来验证表单中的值,无论是文本还是数字,如果长度小于或大于......所有这些都可以正常工作甚至一些自定义规则,但是,我需要在提交表单之前比较几个值...
我需要确保" date"并不比当前日期更重要 现在,收集日期我只需要使用两个输入字段作为"数字"来确定月份和年份 以下查询可以正常验证长度,文本和数字......

jQuery.validator.addMethod("doceMeses", function(value, element) {
    return this.optional(element) || (parseFloat(value) < 12);
}, "can not be grater than 12");
jQuery.validator.addMethod("anioThis", function(value, element) {
    var d = new Date();
    var y = d.getFullYear();
    return this.optional(element) || (parseFloat(value) <= y);
}, "Can not be grater than current year");

    $().ready(function() {
    var validator = $("#cotiza_f").bind("invalid-form.validate", function() {
        $("#summary").html("The form has " + validator.numberOfInvalids() + " errors.");
    }).validate({
        debug: false,
        errorElement: "em",
        errorContainer: $("#warning, #summary"),
        errorPlacement: function(error, element) {
            error.appendTo(element.parent("div").next("div"));
        },
        success: function(label) {
            label.text("ok!").addClass("success");
        },

    rules: {
            nombre: {
                 required: true,
                minlength: 2,
                maxlength: 100

            },
            ap_pa: {
                required: true,
                minlength: 2,
                maxlength: 100
            },
            ap_ma: {
                required: true,
                minlength: 2,
                maxlength: 100
            },
            va_fac: {
                required: true,
                minlength: 2,
                maxlength: 8,
                number: true
            },
            fe_com_m: {
                required: true,
                minlength: 2,
                doceMeses: true,
                number: true
            },
            fe_com_y: {
                required: true,
                minlength: 4,
                anioThis: true,
                number: true
            }
        }
    });
});

正如我之前说的那样工作正常,如果所有内容都已正确填写表单已提交,但我需要确保月份不能比当前使用当前年份更大,表示当前日期为01 / 2015即将开始,但是,02/2015不行,或01/2016不行,01/1988年还可以......你得到的照片......

fe_com_m =月
fe_com_y =年份

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

我认为您可以使用其他自定义方法执行此操作:

$.validator.addMethod("sameYear", function (value, element, param) {
    if (this.optional(element)) {
        return true;
    }

    var today = new Date();
    if ($(param).val() == today.getFullYear()) {
        return parseFloat(value) <= (today.getMonth() + 1);
    }
    return true;
}, "Cannot be in the future!");

您还需要这样的规则(假设您的年份输入为id="fe_com_y"):

    fe_com_m: {
        required: true,
        minlength: 2,
        doceMeses: true,
        number: true,
        sameYear: {
            param: '#fe_com_y', //this fills the param above
            depends: '#fe_com_y:filled' //this only calls it if the year is filled
        }
    },

在此处查看:http://jsfiddle.net/ryleyb/f5uweuk5/