使用 jquery 验证提交前比较值
Compare values before submitting using jquery validate
我正在使用 jquery.validate.js 来验证我表单中的值,无论是文本还是数字,如果长度小于或大于......即使是一些自定义规则,所有这些都工作正常,但是,我在提交表单之前需要比较一些值...
我需要确保 "date" 不晚于当前日期。
现在,为了收集日期,我只使用两个输入字段 "numbers".
询问月份和年份
以下查询可以正常验证长度、文本和数字...
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 = 年
如有任何帮助,我们将不胜感激。
我想你可以用另一种自定义方法来做到这一点:
$.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/
我正在使用 jquery.validate.js 来验证我表单中的值,无论是文本还是数字,如果长度小于或大于......即使是一些自定义规则,所有这些都工作正常,但是,我在提交表单之前需要比较一些值...
我需要确保 "date" 不晚于当前日期。
现在,为了收集日期,我只使用两个输入字段 "numbers".
询问月份和年份
以下查询可以正常验证长度、文本和数字...
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 = 年
如有任何帮助,我们将不胜感激。
我想你可以用另一种自定义方法来做到这一点:
$.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/