Каков наилучший способ (и я предполагаю, что самый простой способ) поместить курсор в конец текста во входном текстовом элементе через JavaScript - после того, как фокус был установлен на элемент?
javascript
арахис
источник
источник
Есть простой способ заставить его работать в большинстве браузеров.
Тем не менее, из-за особенностей некоторых браузеров, более содержательный ответ выглядит примерно так
Использование jQuery (для установки слушателя, но это не обязательно)
Показать фрагмент кода
Использование Vanilla JS (заимствование
addEvent
функции из этого ответа )Показать фрагмент кода
Причуды
Chrome имеет странную причуду, когда событие фокусировки срабатывает до того, как курсор перемещается в поле; что портит мое простое решение. Два варианта исправить это:
focus
наmouseup
. Это было бы довольно раздражающим для пользователя, если вы все еще не отслеживали фокус. Я не очень люблю ни один из этих вариантов.Кроме того, @vladkras указал, что некоторые более старые версии Opera неправильно вычисляют длину, когда у нее есть пробелы. Для этого вы можете использовать огромное число, которое должно быть больше вашей строки.
источник
this.selectionStart = this.selectionEnd = 0;
это должно переместить фокус перед первой буквой поля ввода. Но, скорее, когда я отлаживаю, это даже не меняет значения selectionEnd и selectionStart! И также не перемещая это к первому персонажу !!selectionStart
иlength
возвращение меньшего числа на пространствах. Вот почему я использую10000
или любое другое достаточно большое число вместоthis.value.length
(проверено на IE8 и IE11)Попробуйте это, это сработало для меня:
Для перемещения курсора в конец сначала ввод должен быть сфокусирован, а затем при изменении значения он перейдет в конец. Если вы установите то же значение .value, оно не изменится в Chrome.
источник
this.
перед входом в строках 2, 3 и 4? Мы уже знаем, чтоinput
это элемент ввода. Использованиеthis
кажется излишним. Хорошее решение в противном случае!$input.focus().val($input.val());
Немного поработав с этим, я обнаружил, что лучше всего использовать эту
setSelectionRange
функцию, если браузер ее поддерживает; если нет, вернитесь к использованию метода в ответе Майка Берроу (т.е. замените значение на себя).Я также устанавливаю
scrollTop
высокое значение в случае, если мы находимся в режиме вертикальной прокруткиtextarea
. (Использование произвольно высокого значения кажется более надежным, чем$(this).height()
в Firefox и Chrome.)Я сделал это как плагин jQuery. (Если вы не используете JQuery, я надеюсь, вы все еще можете получить суть достаточно легко.)
Я тестировал в IE6, IE7, IE8, Firefox 3.5.5, Google Chrome 3.0, Safari 4.0.4, Opera 10.00.
Он доступен на jquery.com как плагин PutCursorAtEnd . Для вашего удобства код для версии 1.0 выглядит следующим образом:
источник
Эта функция работает для меня в IE9, Firefox 6.x и Opera 11.x
источник
SCRIPT16389: Unspecified error.
Я попробовал следующее с довольно большим успехом в Chrome
Быстрое изложение:
Он берет каждое поле ввода с фокусом на нем класса, затем сохраняет старое значение поля ввода в переменной, после чего применяет пустую строку к полю ввода.
Затем он ждет 1 миллисекунду и снова вводит старое значение.
источник
Это 2019 год, и ни один из вышеперечисленных методов не работал для меня, но этот сделал, взятый из https://css-tricks.com/snippets/javascript/move-cursor-to-end-of-input/
источник
el.focus()
в,else if
так что это не работало в некоторых случаях. Я проверил это работает сейчас в Chrome и (дрожит) IEПросто. При редактировании или изменении значений сначала установите фокус, а затем установите значение.
источник
Тем не менее, промежуточная переменная нужна, (см. Var val =), иначе курсор ведет себя странно, он нам нужен в конце.
источник
el.setSelectionRange(-1, -1);
https://codesandbox.io/s/peaceful-bash-x2mti
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange
В других методах js
-1
обычно означает (до) последний символ. Это касается и этого, но я не смог найти явного упоминания об этом поведении в документации.источник
Для всех браузеров на все случаи:
Требуется тайм-аут, если вам нужно переместить курсор из обработчика события onFocus
источник
Мне очень нравится принятый ответ, но он перестал работать в Chrome. В Chrome, чтобы курсор дошел до конца, необходимо изменить входное значение. Решение заключается в следующем:
источник
В jQuery это
источник
Эта проблема интересная. Самое странное в этом то, что ни одно решение, которое я нашел, не решило проблему полностью.
+++++++ РЕШЕНИЕ +++++++
Вам нужна функция JS, например:
Вам нужно позвонить этому парню в событиях onfocus и onclick.
ЭТО РАБОТАЕТ НА ВСЕХ УСТРОЙСТВАХ БРАУЗЕРОВ !!!!
источник
Я только что обнаружил, что в iOS настройка
textarea.textContent
свойства будет каждый раз помещать курсор в конец текста в элементе textarea. Поведение было ошибкой в моем приложении, но кажется, что вы могли бы использовать его намеренно.источник
источник
Принимая некоторые ответы ... делая JQuery в одну строку.
источник
Если для поля ввода просто требуется статическое значение по умолчанию, я обычно делаю это с помощью jQuery:
Кажется, это работает во всех браузерах.
источник
Хотя это может быть старый вопрос с множеством ответов, я столкнулся с подобной проблемой, и ни один из ответов не был тем, что я хотел, и / или был плохо объяснен. Проблема со свойствами selectionStart и selectionEnd заключается в том, что они не существуют для номера типа ввода (хотя вопрос был задан для типа текста, я считаю, что это может помочь другим, у которых могут быть другие типы ввода, на которые им нужно сфокусироваться). Поэтому, если вы не знаете, является ли тип ввода, на котором будет фокусироваться функция, номером типа или нет, вы не сможете использовать это решение.
Решение, которое работает в разных браузерах и для всех типов ввода, довольно просто:
Таким образом, курсор находится в конце элемента ввода.
Таким образом, все, что вам нужно сделать, это что-то вроде этого (используя jquery, при условии, что селектор элемента, на который вы хотите сфокусироваться, доступен через атрибут данных «data-focus-element» выбранного элемента, и функция выполняется после нажатия на «.foo»). элемент):
Почему это работает? Проще говоря, когда вызывается .focus (), фокус будет добавлен в начало элемента ввода (что здесь является основной проблемой), игнорируя тот факт, что элемент ввода уже имеет значение в нем. Однако при изменении значения ввода курсор автоматически помещается в конец значения внутри элемента ввода. Поэтому, если вы переопределите значение тем же значением, которое было ранее введено во ввод, значение будет выглядеть нетронутым, однако курсор переместится в конец.
источник
Попробуйте это работает с Vanilla JavaScript.
В Js
источник
Установите курсор при нажатии на текстовую область до конца текста ... Вариация этого кода ... ТАКЖЕ работает! для Firefox, IE, Safari, Chrome.
В серверном коде:
В Javascript:
источник
Если сначала установить значение, а затем установить фокус, курсор всегда будет появляться в конце.
Вот скрипка для тестирования https://jsfiddle.net/5on50caf/1/
источник
Я хотел поместить курсор в конец элемента "div", где contenteditable = true, и я получил решение с кодом Xeoncross :
И эта функция делает магию:
Работает нормально для большинства браузеров, пожалуйста, проверьте это, этот код помещает текст и помещает фокус в конец текста в элементе div (не элемент input)
https://jsfiddle.net/Xeoncross/4tUDk/
Спасибо Xeoncross
источник
Я также столкнулся с той же проблемой. Наконец это сработает для меня:
Вот как мы можем назвать это:
Это работает для меня в сафари, IE, Chrome, Mozilla. На мобильных устройствах я не пробовал это.
источник
Проверьте это решение!
источник
Супер просто (возможно, вам придется сосредоточиться на элементе ввода)
источник
Я пробовал эти предложения раньше, но никто не работал для меня (проверил их в Chrome), поэтому я написал свой собственный код - и он отлично работает в Firefox, IE, Safari, Chrome ...
В текстовой области:
В Javascript:
источник
Вот демоверсия jsFiddle моего ответа. Демонстрация использует CoffeeScript, но вы можете преобразовать его в простой JavaScript, если вам нужно.
Важная часть в JavaScript:
Я публикую этот ответ, потому что я уже написал его для кого-то, у кого был такой же вопрос. Этот ответ охватывает не так много крайних случаев, как основные ответы здесь, но он работает для меня и имеет демоверсию jsFiddle, с которой можно поиграть.
Вот код из jsFiddle, поэтому этот ответ сохраняется, даже если jsFiddle исчезает:
источник
Попробуйте следующий код:
источник
setSelectionRange
подход, безусловно, гораздо более эффективен, когда / где поддерживается.Хотя я отвечаю слишком поздно, но для будущего запроса это будет полезно. И это также работает в
contenteditable
div.Откуда вам нужно установить фокус в конце; написать этот код
И функция -
источник