Como você seleciona programaticamente o texto de um campo de entrada em dispositivos iOS, por exemplo, iPhone, iPad executando Safari móvel?
Normalmente, é suficiente chamar a .select()
função no <input ... />
elemento, mas isso não funciona nesses dispositivos. O cursor é simplesmente deixado no final da entrada existente sem nenhuma seleção feita.
Respostas:
input.setSelectionRange(0, 9999);
https://developer.mozilla.org/en/DOM/Input.select
fonte
.focus()
a entrada antes de invocarinput.setSelectionRange
. Se você estiver ouvindo ofocus
evento na entrada, lembre-se de levar em consideração um loop infinito.readonly
atributo definido.setSelectionRange()
umfocus
manipulador funciona quando você aciona.focus()
programaticamente, mas quando você toca manualmente na entrada de texto no iOS, a seleção não acontece. Basta dizer que tudo o que você precisa fazer é chamarsetSelectionRange()
dentro de um setTimeout de 0 e ele funciona conforme o esperado, não importa o que acione o foco.Nada neste tópico funcionou para mim, aqui está o que funciona no meu iPad:
// t is the input field setTimeout(function() { t.setSelectionRange(0, 9999); }, 1);
fonte
É difícil provar uma negativa, mas minha pesquisa sugere que este é um bug no Mobile Safari.
Observe que focus () funciona, mais ou menos - embora possa exigir mais de um toque para ter sucesso, e não é necessário se você estiver tentando responder a um toque do usuário no campo em questão, pois o próprio toque dará ao campo foco. Infelizmente, seleccione () é simplesmente não-funcionais no Mobile Safari.
Sua melhor aposta pode ser um relatório de bug com a Apple .
fonte
Veja este violino : (insira algum texto na caixa de entrada e clique em 'selecionar texto')
Ele está selecionando texto em uma caixa de entrada no meu iPod (5ª geração iOS6.0.1), abrindo o teclado e também mostrando o menu Cortar / Copiar / Sugerir ...
Usando javascript simples. Não tentei isso com jQuery
document.getElementById("p1").selectionStart = 0 document.getElementById("p1").selectionEnd = 999
Observe que o número 999 é apenas uma amostra. Você deve definir esses números para o número de caracteres que deseja selecionar.
ATUALIZAR:
Para os dois últimos, você pode experimentar disparar um evento de clique no
input
elementoATUALIZAÇÃO: (07-10-2013)
ATUALIZAÇÃO: (14-11-2013)
.selectionStart
e.selectionEnd
faz o trabalho.ATUALIZAÇÃO: (15-01-2015)
fonte
<input/>
, o iPad pensou que eu estava tocando no painel “CSS” do jsfiddle (em que tudo o que eu digitei fica invisível). Assim que meu toque for direcionado ao correto<input/>
, o botão “selecionar texto” funciona perfeitamente bem no iOS-7.0.3 :-).Desculpe, na minha postagem anterior, não percebi o Javascript implicando que você queria uma resposta em Javascript.
Para obter o que deseja em UIWebView com javascript , consegui reunir duas informações importantes para fazê-lo funcionar. Não tenho certeza sobre o navegador móvel.
element.setSelectionRange(0,9999);
faz o que nós queremosO evento mouseUp está desfazendo a seleção
Assim (usando Protótipo):
faz o truque.
Matt
fonte
$("input").focus(function () { this.setSelectionRange(0, 9999); return false; } ).mouseup( function () { return false; });
focusin
vez de foco para que funcionasse, iOS 7Parece que o foco funcionará, mas apenas quando chamado diretamente de um evento nativo. chamar focus usando algo como SetTimeout não aparece chamar o teclado. O controle do teclado ios é muito ruim. Não é uma boa situação.
fonte
Algo como o seguinte está funcionando para mim no Webkit que vem com o Android 2.2:
function trySelect(el) { setTimeout(function() { try { el.select(); } catch (e) { } }, 0); }
Consulte o problema 32865 do Chromium .
fonte
Com o iOS 7 no iPad, a única maneira de fazer isso funcionar foi usando na verdade em
<textarea></textarea>
vez do<input>
campo.por exemplo
<textarea onclick="this.setSelectionRange(0, 9999);">My text will be selected when textarea is clicked.</textarea>
Como evitar que o usuário altere o texto dentro da área foi mais difícil, já que você torna textarea somente leitura, o truque de seleção não funcionará mais.
fonte
Eu enlouqueci procurando por essa solução, enquanto todas as suas respostas ajudaram a abrir outra lata de minhocas para mim.
O cliente queria que o usuário pudesse clicar e selecionar tudo , e também deixar o usuário 'tab' e selecionar tudo no iPad (com um teclado externo. Eu sei, loucura ...)
Minha solução para esse problema foi reorganizar os eventos. Focalize primeiro , clique em e toque em iniciar .
$('#myFUBARid').on('focus click touchstart', function(e){ $(this).get(0).setSelectionRange(0,9999); //$(this).css("color", "blue"); e.preventDefault(); });
Espero que isso ajude alguém, já que vocês me ajudaram inúmeras vezes.
fonte
Se estiver usando navegadores compatíveis com HTML5, você pode usar
placeholder="xxx"
em suainput
tag. Isso deve fazer o trabalho.fonte