jQuery Динамически сосредоточиться на первом входе или текстовой области - PullRequest
26 голосов
/ 26 октября 2010

Вот хитрый способ начать утро.

У меня есть серия значков.Когда вы нажимаете значок, он загружает форму.У некоторых форм есть входные данные [текст], у других есть текстовые поля.

Я пытаюсь придумать jQuery, который после загрузки формы, которую я могу запустить, будет ...или textarea, что бы это ни было, динамически, поэтому мне не нужно, если блоки.

Идеи?

Ответы [ 9 ]

63 голосов
/ 26 октября 2010

Это должно сделать это, я думаю

$("#formId input:text, #formId textarea").first().focus();
41 голосов
/ 27 сентября 2012

Вот оно:

$('#form-id :input:enabled:visible:first').focus();

# form-id - это идентификатор формы; : input выбирает любой элемент input и textarea; : включено гарантирует, что ввод редактируемый; : viisble обеспечивает видимость элемента; : первое очевидно

10 голосов
/ 26 октября 2010
$(":input:first").focus(); 

Селектор :input захватывает все элементы ввода, textarea, select и button.

9 голосов
/ 26 октября 2010

часть вашего кода была бы хороша ... но это должно быть легко.

при условии, что вы загружаете свой for в div, в котором вы знаете идентификатор ....

всехчто-то вроде

$('#TheIdOfYourFormDiv').find('input, textarea').first().focus()

после загрузки формы

4 голосов
/ 26 октября 2010

РЕДАКТИРОВАТЬ

Это на самом деле не так уж и много хорошего решения.Решения Патриции и Онкельборга, представленные ниже, намного элегантнее.

var $firstInput = jQuery("input:first");
var $firstTextArea = jQuery("textarea:first");

if(firstInput.length == 0) {
  $firstTextArea.focus();
}

else {
  $firstInput.focus();
}
1 голос
/ 25 января 2018

Вот решение для загрузочных модалов, разработанное @craztmatt и другими. Я продлил выбор целевого элемента, начиная с модального, который вызвал событие. Этот перехватывает входные данные, текстовые области и элементы выбора.

// do this to make bootstrap modals auto-focus.
// delegate to body so that we only have to set it up once.
$('body').on('shown.bs.modal', function (e) {
    var ele = $(e.target).find('input[type=text],textarea,select').filter(':visible:first'); // find the first input on the bs modal
    if (ele) {ele.focus();} // if we found one then set focus.
})

Не совсем вопрос ОП, но он также должен быть адаптирован к случаю чистого jquery.

1 голос
/ 09 января 2015

Вот мое решение.Код должен быть достаточно простым, чтобы следовать, но вот идея:

  • получить все входы, выделения и текстовые области
  • отфильтровать все кнопки и скрытые поля
  • фильтр только для включенных видимых полей
  • выберите первое
  • сфокусируйте выделенное поле

Код:

function focusFirst(parent) {
    $(parent).find('input, textarea, select')
        .not('input[type=hidden],input[type=button],input[type=submit],input[type=reset],input[type=image],button')
        .filter(':enabled:visible:first')
        .focus();
}

Затем простовызовите focusFirst со своим родительским элементом или селектором.

Селектор:

focusFirst('#parentId');

Элемент:

var el = $('#parentId');
focusFirst(el);
1 голос
/ 12 сентября 2013

Это работает для меня в событии загрузки.

$('#Div').find('input:first').focus();
0 голосов
/ 11 декабря 2014

Потому что: visible является расширением jQuery, а не частью CSS спецификации, запросы с использованием: visible не могут использовать преимущества повышение производительности обеспечивается родным DOM querySelectorAll () метод. Для достижения максимальной производительности при использовании: видимый, чтобы выбрать элементы, сначала выберите элементы, используя чистый селектор CSS, затем используйте .filter (": visible").

Используйте вместо:

$('form').filter(':input:first').focus();

или

$('input').first().focus(); //as shown in the "correct" answer.

Также следует учитывать при использовании .focus()

Попытка установить фокус на скрытый элемент вызывает ошибку в Internet Explorer. Старайтесь использовать .focus () только для элементов, которые видимый. Чтобы запустить обработчики событий фокуса элемента без установки сосредоточиться на элементе, используйте .triggerHandler ("focus") вместо .focus ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...