如果我在表单中添加了自定义验证方法,如何在提交之前触发它?
我没有装饰我的表单字段,但我认为将新方法添加到我的规则部分会触发该方法,但它不起作用。
$.validator.addMethod('myCustomValidation', function (data)
{
// do some work here
return myValidationResult;
}, 'Please respond.');
$("#myFormId").validate({
rules: {
"myCustomValidation": {required: true}
},
messages: {
"myCustomValidation": {
required: "Enter some information before proceeding",
}
},
submitHandler: function(form)
{
// do the work to submit this form
}
});
我希望在按下“提交”按钮时触发验证。
但是,如果我将验证类名称添加到除提交按钮之外的任何表单字段,则会触发此规则。似乎无法在提交之前触发它..
答案 0 :(得分:1)
我没有使用addMethod
功能,但我可以建议你:
$.validator.methods.myCustomValidation = function(value, element, param) {
// Perform custom validation and return true or false
return value === '' || /^([0-9]{10})$/.test(value);
};
$("#myFormId").validate({
rules: {
myElement: {
myCustomValidation: true
}
},
messages: {
myElement: {
myCustomValidation: "Enter some information before proceeding"
}
},
submitHandler: function(form)
{
// do the work to submit this form
}
});
答案 1 :(得分:0)
将您的代码包装在:
$(function(){
//your code goes here
});
这将在页面加载上附加验证事件。
答案 2 :(得分:0)
你错过了什么。规则应该是这样的。
rules: {
"elemId": {
required: true,
myCustomValidation: true
}
},
答案 3 :(得分:0)
致电.valid()
以触发验证:
$("#myFormId").valid();
答案 4 :(得分:0)
我认为你正在寻找addClassRules
$.validator.addMethod('myCustomValidation', function (data)
{
// do some work here
return myValidationResult;
}, 'Please respond.');
$.validator.addClassRules({
myCustomValidation: { myCustomValidation: true, required: true }
});
$("#myFormId").validate({
messages: {
"myCustomValidation": {
required: "Enter some information before proceeding",
}
},
submitHandler: function(form)
{
// do the work to submit this form
}
});
答案 5 :(得分:0)
我建议使用本机$.validator.addMethod绑定自定义方法。之后,只需在blur()
上调用jquery的element
即可触发验证。
由于我怀疑存在于jQuery Validate中的竞争条件,我不得不旋转等待以避免在我以编程方式调用验证时收到空白错误消息
//after binding custom validation method
if($("#myElement").length){//add any checks you need
var millisecondsToWait = 500;
//Spin because it works
setTimeout(function() {
$("#myElement").blur();
//$("#myElement").valid();//or this
}, millisecondsToWait);