Jquery验证:errorPlacement直到blur事件才更新DOM

时间:2010-06-29 16:21:57

标签: jquery jquery-validate

我有一个自定义的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的位不会触发,直到我点击焦点元素或标签离开。

errorPlacement的响应速度太快,无法响应,或者我错过了哪些内容?

1 个答案:

答案 0 :(得分:0)

不用担心,我发现了问题:我在中间有一些错误顺序的线路,所以事件总是很晚才开始!有一天,很难看到树木的木材!