Use setSelectionRange()
dentro de um retorno de chamada para requestAnimationFrame()
:
$(document).on('focus', '._selectTextOnFocus', (e) => {
var input = e.currentTarget;
var initialType = e.currentTarget.type;
requestAnimationFrame(() => {
// input.select() is not supported on iOS
// If setSelectionRange is use on a number input in Chrome it throws an exception,
// so here we switch to type text first.
input.type = "text";
input.setSelectionRange(0, Number.MAX_SAFE_INTEGER || 9999);
input.type = initialType;
});
});
Use em setSelectionRange()
vez de, select()
pois select()
não funciona no Safari móvel (consulte Selecionando texto programaticamente em um campo de entrada em dispositivos iOS (Safari móvel) ).
É necessário aguardar requestAnimationFrame
antes de selecionar o texto, caso contrário, o elemento não será rolado corretamente para a visualização após o teclado ser ativado no iOS.
Ao usá- setSelectionRange()
lo, é importante definir o tipo de entrada para text
, caso contrário, pode lançar exceções no Chrome (consulte selectionStart / selectionEnd em input type = "número" não mais permitido no Chrome ).