Я использую этот код, чтобы попытаться выделить весь текст в поле, когда пользователь фокусируется на поле. Что происходит, он выбирает все на секунду, затем не выбирается и курсор ввода остается там, где я нажал ...
$("input[type=text]").focus(function() {
$(this).select();
});
Я хочу, чтобы все оставалось выбранным.
Ответы:
Попробуйте использовать
click
вместоfocus
. Кажется, он работает как для мыши, так и для ключевых событий (по крайней мере, в Chrome / Mac):jQuery <версия 1.7:
JQuery версия 1.7+:
Вот демо
источник
Я думаю, что происходит так:
Обходной путь может вызывать select () асинхронно, чтобы он полностью выполнялся после focus ():
источник
this
в таких сферах обработка данных немного неожиданна. Я обновлю код.Я думаю, что это лучшее решение. В отличие от простого выбора в событии onclick, это не мешает выделению / редактированию текста с помощью мыши. Он работает с основными движками рендеринга, включая IE8.
http://jsfiddle.net/25Mab/9/
источник
select()
похоже, работает.$('input[autofocus]').select();
Здесь есть несколько достойных ответов, и @ user2072367 - мой любимый, но он дает неожиданный результат, когда вы фокусируетесь не на клике, а на вкладке. (неожиданный результат: чтобы выделить текст после фокуса через вкладку, необходимо щелкнуть еще один раз)
Эта скрипка исправляет эту небольшую ошибку и дополнительно хранит $ (this) в переменной, чтобы избежать избыточного выбора DOM. Проверьте это! (:
Протестировано в IE> 8
источник
После тщательного анализа я предлагаю это как более чистое решение в этой теме:
Демо в jsFiddle
Эта проблема:
Вот немного объяснения:
Во-первых, давайте посмотрим на порядок событий, когда вы щелкаете мышью или вкладываете в поле.
Мы можем регистрировать все соответствующие события, как это:
Некоторые браузеры пытаются позиционировать курсор во время событий
mouseup
илиclick
. Это имеет смысл, поскольку вы можете запустить каретку в одной позиции и перетащить ее, чтобы выделить текст. Он не может обозначать положение каретки, пока вы на самом деле не подняли мышь. Таким образом, функции, которые обрабатываютfocus
, обречены реагировать слишком рано, оставляя браузер переопределять ваше позиционирование.Но проблема в том, что мы действительно хотим справиться с фокусным событием. Это позволяет нам узнать, когда кто-то вышел на поле. После этого мы не хотим продолжать переопределять поведение выбора пользователя.
Решение:
Вместо этого, в
focus
обработчике событий мы можем быстро подключить прослушиватели для событийclick
(click in) иkeyup
(tab in), которые будут запущены.Мы хотим запустить событие только один раз. Мы могли бы использовать
.one("click keyup)
, но это вызвало бы обработчик события один раз для каждого типа события . Вместо этого, как только будет нажата мышь или клавиша, мы вызовем нашу функцию. Первое, что мы сделаем, это удалим обработчики для обоих. Таким образом, не имеет значения, будем ли мы вкладывать или вкладывать. Функция должна выполняться ровно один раз.Теперь мы можем позвонить
select()
после того, как браузер сделал свой выбор, поэтому мы обязательно переопределим поведение по умолчанию.Наконец, для дополнительной защиты, мы можем добавить пространство имен событий к
mouseup
иkeyup
функциям , поэтому.off()
метод не удаляет другие слушателей , которые могут быть в игре.Протестировано в IE 10+, FF 28+ и Chrome 35+
В качестве альтернативы, если вы хотите расширить jQuery с помощью функции,
once
которая будет запускаться ровно один раз для любого количества событий :Тогда вы можете упростить код так:
Демо в скрипке
источник
click
событии, которое находится дальше по конвейеру, чемmouseup
. Так как мы хотим обработать конец выделения как можно позже, чтобы дать нам больше шансов переопределить браузер, использование click вместо mouseup должно помочь. Протестировано в FF, Chrome и IE.one
не будет вырезать его как «Обработчик выполняется один раз для каждого элемента для каждого типа события . Он автоматически отключит событие, которое его вызвало, но другой все равно будет задерживаться иoff
в любом случае позаботится об обоих. вопрос: функция, которая будет срабатывать ровно один раз для любого количества событийЭто сделало бы работу и позволило бы избежать проблемы, при которой вы больше не можете выделять часть текста мышью.
источник
Эта версия работает на IOS, а также исправляет стандартное перетаскивание для выбора на Windows Chrome
http://jsfiddle.net/Zx2sc/2/
источник
Проблема большинства этих решений заключается в том, что они не работают правильно при изменении положения курсора в поле ввода.
onmouseup
Событие изменяет положение курсора в пределах поля, которое обжигало после того, какonfocus
(по крайней мере , в пределах Chrome и FF). Если вы безоговорочно откажетесь,mouseup
пользователь не сможет изменить положение курсора с помощью мыши.Код будет условно предотвращать
mouseup
поведение по умолчанию, если поле в данный момент не имеет фокуса. Это работает для этих случаев:Я проверил это в Chrome 31, FF 26 и IE 11.
источник
Нашел отличное решение, читая эту тему
источник
Я работаю в конце 2016 года, и этот код работает только в последних версиях jquery (в данном случае jquery-2.1.3.js).
источник
Я использовал FF 16.0.2 и jquery 1.8.3, весь код в ответ не работал.
Я использую такой код и работаю.
источник
$("input[type=text]").on('click', function () { $(this).focus.select(); })
вызывает фокусировку и делает выбор, когда пользователь щелкает окно, потому что оно выполняется, когда пользователь щелкает окно. Без обработчика событий код не отвечает на вопрос, а следовательно, понижает голос и комментирует. По сути, вы получили «весь текущий текст выделен», а не «когда он выбирает поле».Используйте clearTimeout для большей безопасности, если вы быстро переключаетесь между двумя входами .. clearTimeout очищает старое время ожидания ...
источник
Прекрасно работает с нативным JavaScript
select()
.или вообще:
источник
Или вы можете просто использовать
<input onclick="select()">
Works отлично.источник
Вы можете использовать простой код:
источник
источник
$.ready
не правильно. Вам нужно передать ему функцию, чтобы она задерживалаattr
до тех пор, пока документ не будет готов. Вы делаете это немедленно, а затем передаете коллекцию элементов в$.ready
.addEventListener
.Я всегда использую,
requestAnimationFrame()
чтобы перепрыгнуть через внутренние механизмы после события, и это отлично работает в Firefox. Не тестировался в Chrome.источник