【发布时间】:2010-06-29 16:21:57
【问题描述】:
我有一个自定义 errorPlacement 函数,它使用自定义显示错误消息的方式更新单独的消息容器。
作为我正在验证的表单的一部分,我有相当数量的输入文本框要验证(想想根据某种结果检查的数字行),作为其中的一部分,需要只显示错误消息一次在我的自定义容器中。
我的代码如下所示:
errorPlacement: function(errorMessageElement, field) {
if(errorMessageElement[0].innerHTML != "") {
if(!$("#alertbar ul li.error").length) { window.scrollTo(0,0); }
var errorMessageText = errorMessageElement[0].innerHTML;
var errorLine = errorMessageElement.attr('for').substr(0,4);
var countIdenticalLineMessages = $("#alertbar ul li[id~='" + errorLine + "']:contains('" + errorMessageText + "')").length;
var errorMessageId = "error-" + errorMessageElement.attr('for');
if (countIdenticalLineMessages < 1) {
if(!$("#alertbar ul li[id='" + errorMessageId + "']").length) {
$('#alertbar ul').append("<li id='" + errorMessageId + "' class='error' />");
}
var fieldErrorContainer = $("#alertbar ul li[id='" + errorMessageId + "']");
var errorContainerHTML = "<span class='hide'>Error - <\/span>" + errorMessageElement[0].innerHTML;
fieldErrorContainer.html(errorContainerHTML);
} else {
var newErrorLineId = "lineerror-" + errorMessageElement.attr('for').substr(0,4);
if(!$("#alertbar ul li[id='" + newErrorLineId + "']").length) {
// the below line doesn't fire till somewhere else on the page is clicked.
$("#alertbar ul li[id='" + errorMessageId + "']").attr("id", newErrorLineId);
}
var currentLineList = [];
if($("#alertbar").data(errorLine)) { currentLineList = $("#alertbar").data(errorLine); }
if(currentLineList.indexOf(errorMessageElement.attr('for')) == -1) { currentLineList.push(errorMessageElement.attr('for')) };
$("#alertbar").data(errorLine, currentLineList);
}
CoreErrorHandling.updateErrorSummary();
};
}
但切换行错误 li 的 id 的位不会触发,直到我点击远离焦点元素或 tab 离开。
errorPlacement 触发太快而无法响应还是我遗漏了什么?
【问题讨论】: