尝试使用 jQuery Validate 验证我不知道其内容的表单并在页面顶部显示摘要。我不希望每个字段旁边都有消息。我可以让它在提交时正常工作,如果我禁用 onfocusout/onblur/onkeyup,一切都会很好。目前我一直在尝试通过 showErrors 做到这一点,但我很开放。
我的印象是 jQuery Validate 只带回在触发 onblur 或 keyup 时失败的单个元素。现在发生的情况是我的摘要每次都会被覆盖,并且当它触发 onblur 时,摘要可能会返回为空(大概是因为 errorMap 仅包含一个失败的元素)。我想要更新或重新生成我的摘要,以便在用户浏览表单时保持正确。
我有点想我可能需要保存对我的验证器的引用,然后循环通过验证器.errors() 或 .elements(),但我不确定该方法的去向。下面是我的整个 validateform() 函数,它是从任何被单击的提交按钮调用的。
function validateform() {
$("form").validate({
showErrors: function(errorMap, errorList) {
var errorCount = this.numberOfInvalids();
if (errorCount > 0) {
if (errorCount == 1) {
$("#errorContainer h3").html("Your form contains " + errorCount + " error, see details below.");
}
else { /*two or more errors */
$("#errorContainer h3").html("Your form contains " + errorCount + " errors, see details below.");
}
var summary = '';
$.each(errorMap, function(key, value) {
var field = $('input[name="' + key + '"],select[name="' + key + '"],textarea[name="' + key + '"]');
field.addClass('err');
var fieldname = field.attr("rel");
summary += '<p><span class="errorkey">' + fieldname + '</span> - <span class="errorvalue">' + value + "</span></p>";
});
$('#errorList').html(summary);
$('#errorContainer').slideDown();
}
},
onfocusout: false,
onkeyup: false,
onclick: false
});
}