Хотя это может быть старый вопрос с множеством ответов, я столкнулся с подобной проблемой, и ни один из ответов не был тем, что я хотел, и / или был плохо объяснен. Проблема со свойствами selectionStart и selectionEnd заключается в том, что они не существуют для номера типа ввода (хотя вопрос был задан для типа текста, я считаю, что это может помочь другим, у которых могут быть другие типы ввода, на которые им нужно сфокусироваться). Поэтому, если вы не знаете, является ли тип ввода, на котором будет фокусироваться функция, номером типа или нет, вы не сможете использовать это решение.
Решение, которое работает в разных браузерах и для всех типов ввода, довольно просто:
- получить и сохранить значение ввода в переменной
- фокусировка ввода
- установить значение ввода на сохраненное значение
Таким образом, курсор находится в конце элемента ввода.
Таким образом, все, что вам нужно сделать, это что-то вроде этого (используя jquery, при условии, что селектор элемента, на который нужно сфокусироваться, доступен через атрибут данных data-focus-element) выбранного элемента, и функция выполняется после нажатия на кнопку «.foo». элемент):
$('.foo').click(function() {
element_selector = $(this).attr('data-focus-element');
$focus = $(element_selector);
value = $focus.val();
$focus.focus();
$focus.val(value);
});
Почему это работает? Просто, когда вызывается .focus (), фокус будет добавлен в начало элемента ввода (что является основной проблемой), игнорируя тот факт, что элемент ввода уже имеет значение в нем. Однако при изменении значения ввода курсор автоматически помещается в конец значения внутри элемента ввода. Поэтому, если вы переопределите значение тем же значением, которое было ранее введено во ввод, значение будет выглядеть нетронутым, однако курсор переместится в конец.