2010-06-29 76 views
0

我有一個自定義的errorPlacement函數,它使用顯示錯誤消息的自定義方式更新單獨的消息容器。Jquery驗證:errorPlacement沒有更新DOM直到模糊事件

作爲我正在驗證的表單的一部分,我有相當數量的輸入文本框進行驗證(認爲是針對某種結果檢查的數字行),並且作爲此需要的一部分,僅將錯誤消息在我的自定義容器中顯示一次。

我的代碼如下所示:

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(); 
    }; 

} 

但直到我從聚焦元素,或選項卡中單擊之遙切換行錯誤裏的ID位在不觸發。

errorPlacement發射得太快以至於無法響應,或者我錯過了什麼?

回答

0

不用擔心,我發現問題所在:我在中間出現了錯誤的幾行,因此事件總是很晚纔開始!有些時候很難看到樹木的木材!