полимерный фокус () на элементе ‹paper-input› или ‹core-input›

Есть ли способ сфокусировать элемент ввода core-input или paper-input?

Я хочу добиться: установить курсор на элемент ввода, чтобы пользователь мог начать вводить текст.

Таким образом, он не будет вынужден щелкать элемент перед записью.


person wormhit    schedule 30.06.2014    source источник


Ответы (5)


core-input отсутствует focus()/blur() API, это, по сути, ошибка.

А пока вы можете сделать это:

<reference to a core/paper-input>.$.input.focus();

person Scott Miles    schedule 30.06.2014
comment
$ .input.focus () работал. Пока все будет в порядке. Спасибо за быстрый ответ! :) - person wormhit; 30.06.2014
comment
Что эквивалент Дарт? - person David Notik; 24.08.2014
comment
core-input теперь поддерживает focus(), но с небольшой уловкой, см. Мое решение ниже - person amit; 10.11.2014

core-input теперь имеет .focus() метод, который он делегирует внутреннему focus()

Из кода core-input.html:

focus: function() {
    this.$.input.focus();
  }

Это означает, что в вашем собственном коде вам нужно называть это следующим образом:

elem[0].focus()

В моем случае я звоню focus с timeout. В этом случае bind необходим core-input для правильного использования this:

$timeout(elem[0].focus.bind(elem[0]));
person amit    schedule 10.11.2014
comment
Все, что делает elem[0].focus.bind(elem[0]), - это создает функцию (которая немедленно отбрасывается); на самом деле он не вызывает focus(). Вы хотели напечатать что-нибудь еще? - person Scott Miles; 10.11.2014
comment
Привет, Скотт, спасибо за это. Я просто отредактировал решение, как вы сказали. У меня это выполняется внутри timeout, который получает функцию, поэтому я отбросил эти скобки. Благодарю. - person amit; 11.11.2014
comment
Извините за разборчивость, но это elem[0].focus.bind(elem[0])() не нужно. elem[0].focus() достаточно. - person Scott Miles; 12.11.2014
comment
@ScottMiles не беспокойтесь, программное обеспечение - это все о деталях. Потребность в bind - особый случай, и я соответствующим образом обновил свой ответ. Спасибо. - person amit; 12.11.2014

.focusAction (); работает немного лучше, плавающие заголовки будут реагировать правильно, если они включены.

person owlyfool    schedule 05.08.2014

для тех, кто использует Polymer 1.0 (не OP на момент публикации)

Для первого ввода бумаги вы можете установить фокус следующим образом:

        $('paper-input input').first().focus();

вы также можете выбрать по идентификатору для конкретного ввода бумаги:

        $('#myValue input').focus();
person MEC    schedule 23.01.2016

Для Полимера 2.0 используйте

this. $. id-of-the-Element.focus ();

поэтому, если ваш элемент похож на
<paper-input id="myInputElement" type="number" name="myInputElement"> </paper-input>

Тогда вы сделаете
this.$.myInputElement.focus();

person Tayab Hussain    schedule 06.07.2018