Я понимаю, что прошло несколько месяцев, но мне просто нужно было решить эту проблему самому, и я считаю, что нашел хорошее решение.
Вместо того, чтобы украшать вкладку, содержащую ошибку в invalidHandler
, вместо этого используйте обработчики highlight
и unhighlight
, чтобы соответствующим образом выделить или отменить выделение вкладки, содержащей недопустимую запись. В отличие от invalidHandler
, который не вызывается до попытки отправки (или ручного вызова для проверки), highlight
и unhighlight
вызываются всякий раз, когда обрабатывается недопустимое поле, включая onBlur.
jQuery('#Form').validate({
highlight: function(element, errorClass, validClass) {
$(element).addClass(errorClass).removeClass(validClass);
$('a[href=#' + $(element).parents('.ui-tabs-panel').attr('id') + ']').addClass(errorClass).removeClass(validClass);
},
unhighlight: function(element, errorClass, validClass) {
$(element).removeClass(errorClass).addClass(validClass);
$('a[href=#' + $(element).parents('.ui-tabs-panel').attr('id') + ']').removeClass(errorClass).addClass(validClass);
}
});
В приведенном выше коде для highlight
и unhighlight
я добавляю и удаляю соответствующие ошибки и допустимые классы из недопустимого элемента (поведение по умолчанию), а затем использую (двойной) селектор, чтобы получить любые <a />
, которые загружают этот элемент содержит div, и я добавляю или удаляю те же классы к этой ссылке на вкладку. В этом коде предполагается, что содержимое вкладки не загружено с помощью AJAX, а ссылки, которые загружают div, имеют ссылку на идентификатор привязки div. Если ваша конфигурация ссылки на вкладки отличается, вам, вероятно, придется немного настроить селектор в соответствии с вашими потребностями.
Обновление
После проверки этого я обнаружил еще одну ловушку, которая может снизить легитимность решения. А именно, это удалит класс ошибки из ссылки на вкладку независимо от того, есть ли на этой вкладке все еще недопустимые элементы. Недействительные элементы по-прежнему остаются выделенными, но вкладка теряет свою подсветку. Я экспериментировал с жизнеспособными обходными путями к этой проблеме, и пока я не нашел один. Я обновлю это, если / когда я сделаю.