JQuery 验证插件 - 成功回调失败
JQuery validate plugin - success callback misfires
我正在使用 JQuery 验证插件验证动态表单(每个字段的规则来自服务器)。出于某种原因,无论实际结果如何,都会在所有字段上调用 success
回调。
表单本身已正确验证,如果有错误将不会提交。
因此,问题是一个显示问题:成功回调负责删除红色错误指示器并显示绿色复选标记,因此给用户的指示与实际结果相矛盾。
这曾经在过去起作用,但我无法检测到任何会导致此类问题的更改。
var form = $(form);
var error = $('.alert-danger', form);
var success = $('.alert-success', form);
var rules = Subject.getRules(Subject.rulesWithMimes);
form.validate({
errorElement: 'span', //default input error message container
errorClass: 'help-block help-block-error', // default input error message class
focusInvalid: false, // do not focus the last invalid input
rules:rules,
messages:messages,
ignore:'[type=file]',
debug:false,
invalidHandler: function (event, validator) { //display error alert on form submit
success.hide();
error.show();
},
onkeyup: function(el, e) {
this.element(el);
},
errorPlacement: function (error, element) { // render error placement for each input type
var icon = $(element).parents('.input-icon');
if (!icon.length) {
var name = $(element).prop("name");
icon = $('.datePicker[data-question='+name+']');
}
icon = icon.find('i.tooltips');
icon.removeClass('fa-check').addClass("fa-warning");
icon.attr("data-original-title", error.text()).tooltip({'container': 'body'});
},
highlight: function (element) { // hightlight error inputs
var el=Subject.findValidationElement(element);
el.removeClass("has-success").addClass('has-error'); // set error class to the control group
el.find("i.tooltips").removeClass("fa-warning").addClass("fa-check").trigger("mouseenter");
},
unhighlight: function (element) { // revert the change done by hightlight
el = $(element).closest("td");
el.removeClass("has-error")
.addClass('has-success');
el.find("i.tooltips").removeClass("fa-warning").addClass("fa-check").attr("data-original-title","");
},
success: function (label, element) {
console.log("success");
var el = $(element).parents('.input-icon').closest(".form-group,td");
if (!el.length) {
var name = $(element).prop("name");
el = $(".datePicker[data-question="+name+"]");
}
if ($(element).parents('.radio-table').length) {
el = $(element).parents("tr");
}
var icon = el.find('i.tooltips');
el.removeClass('has-error').addClass('has-success'); // set success class to the control group
icon.removeClass("fa-warning").addClass("fa-check");
icon.trigger("mouseleave");
},
submitHandler: function (form) {
if (!UploadFile.areRequiredFilesUploaded()) {
bootbox.alert(trans('validation.requiredFiles'));
return false;
}
success.show();
error.hide();
if (AppData.studyId!=AppData.demoStudyId)
form.submit(); // submit the form
}
});
submitHandler 是放置代码以处理表单成功提交的地方。
每次单个输入有效时都会调用 success 选项。
引自文档:
If specified, the error label is displayed to show a valid element. If
a String is given, it is added as a class to the label. If a Function
is given, it is called with the label (as a jQuery object) and the
validated input (as a DOM element). The label can be used to add a
text like "ok!".
因此,在某些元素有效而某些元素无效的情况下,听起来它确实在做它应该做的事情。
问题是我传递了一个带有一些 null
属性的消息数组。显然,即使在 debug
模式下,插件也不会发出任何警报,并且会针对消息为 null
的那些字段呈现我的问题中描述的行为。
我正在使用 JQuery 验证插件验证动态表单(每个字段的规则来自服务器)。出于某种原因,无论实际结果如何,都会在所有字段上调用 success
回调。
表单本身已正确验证,如果有错误将不会提交。 因此,问题是一个显示问题:成功回调负责删除红色错误指示器并显示绿色复选标记,因此给用户的指示与实际结果相矛盾。
这曾经在过去起作用,但我无法检测到任何会导致此类问题的更改。
var form = $(form);
var error = $('.alert-danger', form);
var success = $('.alert-success', form);
var rules = Subject.getRules(Subject.rulesWithMimes);
form.validate({
errorElement: 'span', //default input error message container
errorClass: 'help-block help-block-error', // default input error message class
focusInvalid: false, // do not focus the last invalid input
rules:rules,
messages:messages,
ignore:'[type=file]',
debug:false,
invalidHandler: function (event, validator) { //display error alert on form submit
success.hide();
error.show();
},
onkeyup: function(el, e) {
this.element(el);
},
errorPlacement: function (error, element) { // render error placement for each input type
var icon = $(element).parents('.input-icon');
if (!icon.length) {
var name = $(element).prop("name");
icon = $('.datePicker[data-question='+name+']');
}
icon = icon.find('i.tooltips');
icon.removeClass('fa-check').addClass("fa-warning");
icon.attr("data-original-title", error.text()).tooltip({'container': 'body'});
},
highlight: function (element) { // hightlight error inputs
var el=Subject.findValidationElement(element);
el.removeClass("has-success").addClass('has-error'); // set error class to the control group
el.find("i.tooltips").removeClass("fa-warning").addClass("fa-check").trigger("mouseenter");
},
unhighlight: function (element) { // revert the change done by hightlight
el = $(element).closest("td");
el.removeClass("has-error")
.addClass('has-success');
el.find("i.tooltips").removeClass("fa-warning").addClass("fa-check").attr("data-original-title","");
},
success: function (label, element) {
console.log("success");
var el = $(element).parents('.input-icon').closest(".form-group,td");
if (!el.length) {
var name = $(element).prop("name");
el = $(".datePicker[data-question="+name+"]");
}
if ($(element).parents('.radio-table').length) {
el = $(element).parents("tr");
}
var icon = el.find('i.tooltips');
el.removeClass('has-error').addClass('has-success'); // set success class to the control group
icon.removeClass("fa-warning").addClass("fa-check");
icon.trigger("mouseleave");
},
submitHandler: function (form) {
if (!UploadFile.areRequiredFilesUploaded()) {
bootbox.alert(trans('validation.requiredFiles'));
return false;
}
success.show();
error.hide();
if (AppData.studyId!=AppData.demoStudyId)
form.submit(); // submit the form
}
});
submitHandler 是放置代码以处理表单成功提交的地方。
每次单个输入有效时都会调用 success 选项。
引自文档:
If specified, the error label is displayed to show a valid element. If a String is given, it is added as a class to the label. If a Function is given, it is called with the label (as a jQuery object) and the validated input (as a DOM element). The label can be used to add a text like "ok!".
因此,在某些元素有效而某些元素无效的情况下,听起来它确实在做它应该做的事情。
问题是我传递了一个带有一些 null
属性的消息数组。显然,即使在 debug
模式下,插件也不会发出任何警报,并且会针对消息为 null
的那些字段呈现我的问题中描述的行为。