Як встановити фокус на полі введення за допомогою JQuery


106

Враховуючи таку структуру HTML:

<div class="wrapper">
    <div class="top">
        <a href="http://example.com" class="link">click here</a>
    </div>
    <div class="middle">
        some text
    </div>
    <div class="bottom">
        <form>
            <input type="text" class="post">
            <input type="submit">
        </form>
    </div>
<div>

що повториться кілька разів на сторінці, як я можу встановити фокус на полі введення в .bottomдіві, коли користувач натискає на посилання в .topdiv?

Наразі я дію .bottomуспішно з’являється при натисканні за допомогою коду JQuery нижче, але не можу зрозуміти, як одночасно встановити фокус на полі введення.

$('.link').click(function() {
    $(this).parent().siblings('div.bottom').show();
});

Дякую!


На ваше запитання відповіли, але також: Я припускаю, що ви також виконуєте return false;в кінці зворотного виклику події? Або function(e) { e.preventDefault(); ..... }? Якщо ні, ваш веб-переглядач просто перейде на цю сторінку після виконання зворотного дзвінка.
simshaun

@simshaun перейти на яку сторінку?
рухомий камінь

Ну, у вашому прикладі, коли ви натискаєте на це посилання, воно перейде на example.com .
simshaun

о, це правильно, дякую за голови!
рухомий камінь

Відповіді:


135

Спробуйте це, щоб встановити фокус на перше поле введення:

$(this).parent().siblings('div.bottom').find("input.post").focus();

1
Пробіл між input& :first. Чи зростає jQuery автоматично? Я завжди думав, що так і має бути input:first.
simshaun

Так, ви можете написати це будь-яким способом. Я вважаю, що це input:firstможе бути формальніший спосіб його написання, хоча читати видається простіше інакше. Але, можливо, це тільки я :)
Джастін Етьє

Я здогадуюсь, що тому, що я так звик до цього, коли бачу простір, я автоматично думаю, що "дочірній елемент", і він займає секунду, щоб знезаразити себе. Але ей, це тільки я. Це здорово, що це працює в будь-якому випадку.
simshaun

@justin мені насправді довелося трохи налаштувати його, щоб він працював: $(this).parent().siblings('div.bottom').find("input.post").focus();але .find()це селектор, якого я шукав. Цікаво input :firstні input:firstпрацювали.
рухомий камінь

Цікаво, ймовірно, тому, що введення знаходиться в межах formтегу. У будь-якому разі, радий, що ви працюєте на цьому!
Джастін Етьє

14

Якщо вхід знаходиться в діалоговому вікні модального завантаження, відповідь відрізняється. Копіювання з пункту Як встановити фокус на перше введення тексту в режимі завантажувальної програми після відображення цього потрібно:

$('#myModal').on('shown.bs.modal', function () {
  $('#textareaID').focus();
})  

7

Відповідь Джастіна не спрацювала для мене (Chromium 18, Firefox 43.0.1). jQuery's .focus()створює візуальну підсвітку, але текстовий курсор не з’являється в полі (jquery 3.1.0).

Натхненний https://www.sitepoint.com/jqueryhtml5-input-focus-cursor-positions/ , я додав атрибут автофокусування до поля введення та вуаля!

function addfield() {
    n=$('table tr').length;
    $('table').append('<tr><td><input name=field'+n+' autofocus></td><td><input name=value'+n+'></td></tr>');
    $('input[name="aa"'+n+']').focus();
}

1
Працювали для мене. Простіша версія виглядає так: $ ('. Class input'). Focus (); $ ('. class input'). prop ('автофокусування');
raison
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.