2010-06-29 4 views
0

У меня есть пользовательская функция errorPlacement, которая обновляет отдельный контейнер сообщений с пользовательским способом отображения сообщений об ошибках.Jquery validate: 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(); 
    }; 

} 

Но бит, который переключает идентификатор литий ошибки линии не стреляя, пока я нажимаю от сфокусированного элемента или вкладки прочь.

Быстрое срабатывание errorPlacement для ответа или я что-то упускаю?

ответ

0

Не беспокойтесь, я нашел проблему: у меня была пара строк в неправильном порядке прямо посередине, поэтому мероприятие всегда срабатывало поздно! Когда-нибудь трудно увидеть лес для деревьев!

Смежные вопросы