Я пытаюсь найти, существует ли класс, а не просто найти первый элемент формы. Как написать: ввод? Кажется, это не работает.
$('.focus:not(:hidden):first, :input:not(:hidden):first').focus();
Селекторы, разделенные запятыми, не являются иерархическими, как вы указываете. Ваш селектор даст первый видимый .focus
и первый видимый элемент ввода. Вам нужно разбить это на два селектора:
var focusElement = $('.focus:visible:first');
if(focusElement.length == 0)
focusElement = $(':input:visible:first');
focusElement.focus();
Или, я полагаю, вы могли бы написать
$('.focus:visible:first, body:not(:has(.focus:visible)) :input:visible:first').focus();
Ваш код действительно работал для меня. Взгляните на этот jsfiddle. Попробуйте удалить мой class='focus'
а затем снова вернется к выбору первого поля ввода.
Я бы хотел легко понять модель:
var finder = $('.focus:not(:hidden):first');
finder = finder.length ? finder: $(':input:not(:hidden):first');
finder.focus();
Тот же результат, но, скорее всего, лучше, учитывая право на левый шипение: производительность
var finder = $('.focus').not(':hidden').eq(0);
finder = finder.length ? finder: $(':input').not(':hidden').eq(0);
finder.focus();