Вот пример в React, но он может быть переведен в jQuery на vanilla JS, если вы предпочитаете:
class Num extends React.Component {
click = ev => {
const el = ev.currentTarget;
if(document.activeElement !== el) {
setTimeout(() => {
el.select();
}, 0);
}
}
render() {
return <input type="number" min={0} step={15} onMouseDown={this.click} {...this.props} />
}
}
Хитрость здесь в том, чтобы использовать onMouseDown
, поскольку элемент уже получил focus к тому времени, когда срабатывает событие «click» (и, таким образом, проверка activeElement
завершится неудачей).
Проверка activeElement
необходима, чтобы пользователь мог расположить курсор в нужном месте безпостоянно повторно выбирая весь ввод.
Время ожидания необходимо, потому что в противном случае текст будет выделен, а затем мгновенно отменен, как я полагаю, браузер выполняет проверку позиционирования курсора после слов.
Инаконец, el = ev.currentTarget
необходим в React , потому что React повторно использует объекты событий, и вы потеряете синтетическое событие к моменту запуска setTimeout.