假设:
现在,当我尝试使用以下方法调用单个元素验证时:
form.validate().element(txtPostalCode)
出现问题:
验证失败时,验证摘要中未显示任何错误消息。
验证成功后,我不断通过不引人注意的验证获得此错误。
Uncaught TypeError: Cannot read property 'attr' of undefined
进一步深入挖掘代码:
function onSuccess(error) { // 'this' is the form element
var container = error.data("unobtrusiveContainer"),
**replaceAttrValue = container.attr("data-valmsg-replace"),**
有关如何实现这一目标的任何想法?基本上我想做的是验证一个元素,并在验证摘要中显示错误(如果有的话)。
谢谢!
答案 0 :(得分:0)
这就是我做的。它解决了我的问题。所以基本上,
我愿意接受更优雅的解决方案,但下面的代码符合我的需求。
谢谢!希望它有所帮助!
var valSummary = $(".validation-summary");
var settings = $.data($('form')[0], 'validator').settings;
var ulSummary = valSummary.find("ul");
ulSummary.empty();
settings.showErrors = $.noop();
settings.showErrors = function (errorMap, errorList) {
for (var i = 0; i < errorList.length; i++) {
var liControl = $("<li />", {
"text": errorList[i].message
});
var checkDuplicate = ulSummary.filter(function (idx, elem) {
return $.trim($(elem).html()) === $.trim(liControl.html());
});
if (checkDuplicate.length === 0) {
ulSummary.append(liControl);
}
}
valSummary.show();
}
if (txtPostalCode.valid() && txtUnitNo.valid()) {
valSummary.hide();
RefreshValidationRules();
}
else {
settings.showErrors = $.noop();
return;
}
function RefreshValidationRules() {
$("form").removeData("validator");
$("form").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("form");
UnsetFocusInvalid();
}
function UnsetFocusInvalid() {
var settings = $.data($('form')[0], 'validator').settings;
settings.focusInvalid = false;
settings.onfocusout = $.noop();
}