JQuery Динамически сосредоточиться на первом INPUT или Textarea

Трудно начать утро.

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

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

Идеи?

Ответ 1

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

$("#formId input:text, #formId textarea").first().focus();

Ответ 2

Вот он:

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

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

Ответ 3

$(":input:first").focus(); 

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

Ответ 4

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

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

все, что вам нужно сделать, это что-то вроде

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

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

Ответ 5

ИЗМЕНИТЬ

На самом деле это не так много решений. Нижеприведенные решения Patricia и Onkelborg намного более элегантны.

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

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

else {
  $firstInput.focus();
}

Ответ 6

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

$('#Div').find('input:first').focus();

Ответ 7

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

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

Код:

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);

Ответ 8

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

// 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.
})

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

Ответ 9

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

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

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

или

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

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

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