Определите, какой элемент является первым, и сделайте это

0

Мне нужно сосредоточиться на первом элементе формы или классе ".фокус"; в зависимости от того, что видно или первым.

Кажется, это не сортирует каждый, чтобы определить, что на первом месте?

http://jsfiddle.net/infatti/tdvHJ/1/

$('.focus:visible:first, body:not(:has(.focus:visible)) input:visible:first, body:not(:has(.focus:visible)) textarea:visible:first').focus();
Теги:

4 ответа

2
Лучший ответ

Это обнаружит все видимые элементы ввода, элементы textarea и элементы фокуса:

$('input:visible, .focus:visible, textarea:visible')

Он также будет упорядочен по заказу в DOM, поэтому первый из этих элементов в документе будет первым в объекте jQuery. Чтобы получить доступ к первому:

$('input:visible, .focus:visible, textarea:visible').eq(0);

и сосредоточиться на нем:

$('input:visible, .focus:visible, textarea:visible').eq(0).focus();

Обратите внимание, что, как я только что узнал, jQuery считает элементы "видимыми", если они занимают место в документе. Таким образом, элементы с visibility:hidden или opacity:0 все равно будут считаться видимыми:

http://api.jquery.com/visible-selector/

  • 1
    И просто совет для OP, если есть какой-либо способ ограничить поиск, который улучшил бы производительность селектора, если наблюдалась медлительность. Например, что-то вроде $(#container_with_inputs).find(...) .
  • 0
    Моим первым выбором был: visible, но поскольку остальные части формы находятся на вкладках Ajax, они являются «display: none», поэтому видимость не будет работать.
Показать ещё 2 комментария
0

im не уверен, чего вы пытаетесь достичь, поскольку нет элементов с фокусом класса. Просто добавьте фокус класса к вашему элементу ввода, а затем нам

$('.focus').focus();
0

Как это?

$('.focus:visible:first, body:not(:has(.focus:visible)) input:visible:first, body:not(:has(.focus:visible)) textarea:visible:first').eq(0).focus();

Сценарий: http://jsfiddle.net/infatti/tdvHJ/1/

Eq (0) выбирает первый элемент...;)

0

Пытаться:

$('.focus:visible:first').filter(":input").focus();

Пример jsFiddle

  • 0
    это тот же результат, который у меня уже есть. он фокусируется на втором входе, когда текстовая область является первой. Мне нужно, чтобы сосредоточиться на первом элементе, ввода или textarea.
  • 0
    Посмотри на скрипку. Есть ли у textarea класс ".focus"? Добавьте его и посмотрите, что получится.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню