我正在尝试将jquery validate插件应用于jquery移动表单 我正在使用: jquery 2.1.1 jquery mobile 1.4.2 jquery验证插件1.11.0
在pagecreate事件上调用验证初始化:
$(document).on('pagecreate', '#page2', function(evt) {
xxx.addCase.init();
});
init函数执行各种操作:
xxx.addCase.form.validator = xxx.addCase.form.validate({
ignore: ':hidden:not([class~=selectized],[name=contactName]), :hidden > .selectized, .selectize-control .selectize-input input',
focusInvalid: false,
focusCleanup: true,
onclick: false,
errorClass: 'text-danger',
errorPlacement: xxx.addCase.validationErrorPlacement,
success: xxx.addCase.validationSuccess,
rules: {
SerialNumber__c: 'required',
ContactId : 'required',
SuppliedPhone : { required: { depends: function(element) {
if('' === xxx.addCase.email.val())
{
return true;
}
return false;
} }, phone: true, maxlength: 40 },
SuppliedEmail : { required: { depends: function(element) {
if('' === xxx.addCase.phone.val())
{
return true;
}
return false;
} }, email: true, maxlength: 80 },
Subject : { required: true, maxlength: 255 },
Description : { required: false, maxlength: 32000 },
contactName : { maxlength: 121 }
},
messages: {
SuppliedPhone : { required: addCaseFormTranslation.validate.custom.required },
SuppliedEmail : { required: addCaseFormTranslation.validate.custom.required }
},
submitHandler: function(form) {
//chiamata callback submit form
xxx.addCase.form.submitter(form);
}
});
我注意到这个设置有很多不同的问题,所以我做了一个小穴居人调试把console.logs放在原始的jquery validate插件中:
validate: function( options ) {
console.log('validating');
...
和
// constructor for validator
$.validator = function( options, form ) {
console.log('constructor');
console.log(options);
console.log(form);
this.settings = $.extend( true, {}, $.validator.defaults, options );
this.currentForm = form;
this.init();
};
这是我在页面加载后在firebug上获得的,显然是导致问题的原因(请考虑与console.log调用有关):
验证 构造函数 未定义 4验证 构造函数 对象{ignore =“:hidden:not([class~ = sele ... .selectize-input input”,focusInvalid = false,focusCleanup = true,altri elementi ...}
jquery validate被称为5(五!)次,第一次没有我的设置,所以我不知道为什么它会如此以及如何一次调用验证器。