У вас есть несколько проблем.
Первый - это блуждающий );
в вашем коде:
if($('.errortd', this).not(':hidden').length>0){
$("#tabs").tabs('select', i);
}); // <------ Right here
Тогда вы используете :hidden
, когда вы не должны быть. Из прекрасного руководства :
Элементы могут считаться скрытыми по нескольким причинам:
[...]
- Элемент-предок скрыт, поэтому элемент не отображается на странице.
Это означает, что <label>
всегда будет считаться скрытым, если он находится на нетоковой вкладке.
Вы могли бы сделать что-то вроде этого:
var $shown = $(this).find('.errortd').filter(function() {
var dpy = $(this).css('display');
return !dpy || dpy != 'none';
});
if($shown.length > 0)
$("#tabs").tabs('select', i);
Демо: http://jsfiddle.net/ambiguous/agrCe/
Или добавьте класс к элементам <label>
, который скрывает их, а не скрывает их вручную. У вас есть немного CSS, как это:
.no-error {
display: none;
}
А потом:
if($(this).find('.errortd:not(.no-error)').length > 0)
$("#tabs").tabs('select', i);
Демо: http://jsfiddle.net/ambiguous/Z4D2A/