У меня есть ввод текста. Когда ввод получает фокус, я хочу выделить текст внутри ввода.
С jQuery я бы сделал это так:
<input type="text" value="test" />
$("input[type=text]").click(function() {
$(this).select();
// would select "test" in this example
});
Я искал вокруг, пытаясь найти способ Angular, но большинство примеров, которые я нахожу, связаны с директивой, которая отслеживает изменение модального свойства. Я предполагаю, что мне нужна директива, которая отслеживает ввод, который получает фокус. Как мне это сделать?
angularjs
angularjs-directive
Билли Кувер
источник
источник
<input type="text" value="test" onclick="this.select()" />
?Ответы:
В Angular это можно сделать, создав настраиваемую директиву, которая выполняет автоматический выбор за вас.
Примените директиву следующим образом:
View demo
Update1 : удалена зависимость jQuery.
Обновление 2 : ограничить как атрибут.
Update3 : работает в мобильном Safari. Позволяет выделить часть текста (требуется IE> 8).
источник
restrict: 'A'
), поскольку эта директива направлена на расширение поведения существующего элемента .selectOnLoad
директивой link (). Но в link (), хотя область видимости уже заполнена, DOM элемента еще не синхронизирована с $ scope, поэтому, когда я вызываю select (), элемент все еще пуст и ничего не выделено. Единственный способ обойти, который я нашел, - это $ timeout, но я чувствую, что это может перестать работать с какой-то новой версией Angular.Вот расширенная директива, которая позволяет избежать повторного выбора текста, когда пользователь щелкает, чтобы поместить курсор в поле ввода.
источник
this
на,element[0]
и он должен работать. Я также рекомендую изменить егоclick
на,focus
чтобы текст выделялся, если пользователь вкладывает вкладки во ввод, а не щелкает по нему.Это старый ответ для Angular 1.x
Лучший способ сделать это - использовать
ng-click
встроенную директиву:РЕДАКТИРОВАТЬ:
Как любезно напомнил JoshMB ; ссылки на узлы DOM в Angular 1.2+ больше не разрешены. Итак, я перешел
$event.target.select()
в контроллер:Затем в вашем контроллере:
Вот пример скрипки .
источник
Ни одно из предложенных решений мне не подошло. После быстрого исследования я пришел к следующему:
Это сочетание нескольких предложенных решений, но работает как с щелчком, так и с фокусом (подумайте об автофокусе) и позволяет вручную выбирать частичное значение во вводе.
источник
focusedElement
?Для меня ng-click не имеет смысла, потому что вы никогда не сможете изменить положение курсора, не выделив весь текст снова, я обнаружил, что это раздражает. Тогда лучше использовать ng-focus, потому что текст выделяется только в том случае, если ввод не был сфокусирован, если вы щелкните еще раз, чтобы переместить курсор, тогда текст просто отменяется, как и ожидалось, и вы можете писать между ними.
Я обнаружил, что такой подход является ожидаемым поведением UX.
Используйте ng-focus
Вариант 1: отдельный код
и в контроллере
Вариант 2: в качестве альтернативы вы можете объединить приведенный выше код в этот «однострочный» (я не тестировал это, но он должен работать)
источник
В angular 2 это сработало для меня, как в Chrome, так и в Firefox:
источник
В принятом ответе используется событие щелчка, однако, если вы используете событие фокуса, только 1-й щелчок вызовет событие, и оно также срабатывает, когда используется какой-либо другой метод для фокусировки на вводе (например, нажатие вкладки или вызов фокуса в коде).
Это также делает ненужным проверять, сфокусирован ли элемент уже, как предлагает ответ Тамлина.
источник
this.select
.Никаких директив не требуется, просто добавьте
onfocus="this.select()"
собственный javascript в элемент ввода или текстовую область.источник
Модифицированная версия, которая работала у меня. Первый щелчок выделяет текст, второй щелчок по тому же элементу отменяет выделение текста
})
источник
Самый простой способ выделить весь текст при нажатии, фокусе или табуляции !!!:
...
источник