Ответ 1
Это должно сделать это, я думаю
$("#formId input:text, #formId textarea").first().focus();
Трудно начать утро.
У меня есть серия значков. Когда вы нажимаете значок, он загружает форму. Некоторые из форм имеют вход [текст], другие имеют текстовые поля.
То, что я пытаюсь придумать, - это jQuery, что, как только я загружу форму, которую я могу запустить, это будет... Сосредоточьтесь на первом вводе или текстовом поле, каким бы оно ни было, динамически, поэтому мне не нужно, если блоки.
Идеи?
Это должно сделать это, я думаю
$("#formId input:text, #formId textarea").first().focus();
Вот он:
$('#form-id :input:enabled:visible:first').focus();
# form-id - идентификатор формы; : input выбирает любой элемент ввода и textarea; : enabled обеспечивает редактирование ввода; : viisble обеспечивает видимость элемента; : сначала очевидно
$(":input:first").focus();
Селектор :input
захватывает все элементы ввода, textarea, select и button.
некоторые из ваших кодов были бы хороши.. но это должно быть легко.
предполагая, что вы загрузите свой файл в div, который вам известен id....
все, что вам нужно сделать, это что-то вроде
$('#TheIdOfYourFormDiv').find('input, textarea').first().focus()
после загрузки формы
ИЗМЕНИТЬ
На самом деле это не так много решений. Нижеприведенные решения Patricia и Onkelborg намного более элегантны.
var $firstInput = jQuery("input:first");
var $firstTextArea = jQuery("textarea:first");
if(firstInput.length == 0) {
$firstTextArea.focus();
}
else {
$firstInput.focus();
}
Он работает для меня в событии загрузки.
$('#Div').find('input:first').focus();
Вот мое решение. Код должен быть достаточно прост, чтобы следовать, но вот идея:
Код:
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);
Здесь решение для 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.
Потому что: 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().