Eu tenho o código a seguir para exibir uma caixa de texto em uma página da Web HTML.
<input type="text" id="userid" name="userid" value="Please enter the user ID" />
Quando a página é exibida, o texto contém a mensagem Digite a ID do usuário . No entanto, descobri que o usuário precisa clicar 3 vezes para selecionar todo o texto (nesse caso, por favor, digite o ID do usuário ).
É possível selecionar o texto inteiro com apenas um clique?
Editar:
Desculpe, esqueci de dizer: devo usar a entrada type="text"
javascript
html
textinput
Questões
fonte
fonte
<label>
para o rótulo e não ovalue
. Você pode usar JS e CSS para fazer com que pareça o mesmo, embora não seja tão anti-semântico. dorward.me.uk/tmp/label-work/example.html tem um exemplo usando jQuery.Respostas:
Você pode usar este snippet javascript:
Mas, aparentemente, não funciona no Safari móvel. Nesses casos, você pode usar:
fonte
this.id
como argumento para o manipulador de cliques. Melhor ainda, você pode eliminargetElementById
completamente e passarthis
como argumento.this.setSelectionRange(0, this.value.length)
lugar.As soluções postadas anteriormente têm duas peculiaridades:
Aqui está uma solução completa que seleciona todo o texto em foco, mas permite selecionar um ponto específico do cursor após o foco.
fonte
.on('blur', 'input', function(){focusedElement = null;})
0
obras para mim no chrome e no firefox. não sei de onde50
vem o tempo limite .Html (você precisará colocar o atributo onclick em todas as entradas para as quais deseja trabalhar na página)
OU UMA OPÇÃO MELHOR
jQuery (isso funcionará para todas as entradas de texto na página, não há necessidade de alterar seu html):
fonte
Eu sei que isso é antigo, mas a melhor opção é agora usar o novo
placeholder
atributo HTML, se possível:Isso fará com que o texto seja exibido, a menos que um valor seja inserido, eliminando a necessidade de selecionar texto ou limpar as entradas.
fonte
As respostas listadas são parciais de acordo comigo. Vinculei abaixo dois exemplos de como fazer isso no Angular e no JQuery.
Esta solução possui os seguintes recursos:
JQuery: http://plnkr.co/edit/VZ0o2FJQHTmOMfSPRqpH?p=preview
Angular: http://plnkr.co/edit/llcyAf?p=preview
fonte
Tentar:
Funciona muito bem para mim.
fonte
Você sempre pode usar
document.execCommand
( suportado nos principais navegadores )Seleciona todo o texto no elemento atualmente focado.
fonte
<input type="text" onclick="document.execCommand('selectall',null,false);" />
contenteditable
elementos também. Eu acho que você também pode torná-lo um pouco mais elegante, ou seja,<input type="text" onfocus="document.execCommand('selectall')">
- com certeza você pode remover onull
efalse
se não os usar.onfocus
parece melhor queonclick
. e sim, pode-se acabar comnull
efalse
. Obrigado!onfocus
, a página inteira é selecionada quando a entrada é clicada no Chrome.onclick
funciona bem.foco automático de entrada, com evento onfocus:
Isso permite abrir um formulário com o elemento desejado selecionado. Ele funciona usando o foco automático para atingir a entrada, que então envia um evento de foco automático, que por sua vez seleciona o texto.
fonte
Nota: Quando você considera
onclick="this.select()"
: No primeiro clique, Todos os caracteres serão selecionados. Depois disso, talvez você queira editar algo na entrada e clicar entre os caracteres novamente, mas ele selecionará todos os caracteres novamente. Para corrigir esse problema, você deve usar emonfocus
vez deonclick
.fonte
De fato, use,
onclick="this.select();"
mas lembre-se de não combiná-lo comdisabled="disabled"
- ele não funcionará e você precisará selecionar manualmente ou clicar várias vezes para selecionar ainda. Se você deseja bloquear o valor do conteúdo a ser selecionado, combine com o atributoreadonly
.fonte
Aqui está uma versão reutilizável da resposta de Shoban:
Dessa forma, você pode reutilizar o script claro para vários elementos.
fonte
Você pode substituir
Com:
O espaço reservado é usado para substituir o valor como você deseja que as pessoas possam digitar na caixa de texto sem precisar clicar várias vezes ou usar as teclas Ctrl + a. O marcador de posição faz com que não seja um valor, mas como o nome sugere um marcador de posição. É isso que é usado em vários formulários on-line que diz "Nome de usuário aqui" ou "E-mail" e quando você clica nele, o "E-mail" desaparece e você pode começar a digitar imediatamente.
fonte
A solução exata para o que você pediu é:
Mas suponho que você esteja tentando mostrar "Insira o ID do usuário" como um espaço reservado ou dica na entrada. Portanto, você pode usar o seguinte como uma solução mais eficiente:
fonte
Aqui está um exemplo no React, mas ele pode ser traduzido para jQuery no vanilla JS, se você preferir:
O truque aqui é usar
onMouseDown
porque o elemento já recebeu o foco no momento em que o evento "click" é acionado (e, portanto, oactiveElement
verificação falhará).o
activeElement
verificação é necessária para que o usuário possa posicionar o cursor onde desejar, sem selecionar novamente constantemente toda a entrada.O tempo limite é necessário porque, caso contrário, o texto será selecionado e, em seguida, instantaneamente desmarcado, como eu acho que o navegador faz o controle do posicionamento do cursor após as palavras-chave.
E, por último,
el = ev.currentTarget
é necessário no React porque o React reutiliza objetos de evento e você perde o evento sintético no momento em que o setTimeout for acionado.fonte
O problema de capturar o evento click é que cada clique subsequente no texto o selecionará novamente, enquanto o usuário provavelmente esperava reposicionar o cursor.
O que funcionou para mim foi declarar uma variável, selectSearchTextOnClick e defini-la como true por padrão. O manipulador de cliques verifica se a variável ainda é verdadeira: se for, ela a define como false e executa o select (). Em seguida, tenho um manipulador de eventos de desfoque que o define novamente como verdadeiro.
Até agora, os resultados parecem o comportamento que eu esperaria.
(Edit: Eu esqueci de dizer que havia tentado capturar o evento de foco como alguém sugeriu, mas isso não funciona: depois que o evento de foco é acionado, o evento de clique pode ser acionado, desmarcando imediatamente o texto).
fonte
Esta pergunta tem opções para quando .select () não está funcionando em plataformas móveis: Selecionando programaticamente texto em um campo de entrada em dispositivos iOS (Safari móvel)
fonte
Html como este
<input type="text" value="click the input to select" onclick="javascript:textSelector(this)"/>
e código javascript sem ligação
fonte
Bem, essa é uma atividade normal para um TextBox.
Clique 1 - Definir foco
Clique em 2/3 (clique duplo) - Selecionar texto
Você pode definir o foco no TextBox quando a página for carregada pela primeira vez para reduzir a "seleção" a um único evento de clique duplo.
fonte
Use "espaço reservado" em vez de "valor" no seu campo de entrada.
fonte
Se você estiver usando o AngularJS, poderá usar uma diretiva personalizada para facilitar o acesso:
Agora pode-se usá-lo assim:
A amostra está com requirejs - portanto, a primeira e a última linha podem ser ignoradas se você estiver usando outra coisa.
fonte
Se alguém quiser fazer isso na página carregar w / jQuery (doce para campos de pesquisa) aqui está a minha solução
Com base neste post. Graças a CSS-Tricks.com
fonte
Se você está apenas tentando ter um texto de espaço reservado que é substituído quando um usuário seleciona o elemento, obviamente é uma prática recomendada usar o
placeholder
atributo hoje em dia. No entanto, se você deseja selecionar todo o valor atual quando um campo ganha foco, uma combinação das respostas @Cory House e @Toastrackenigma parece ser a mais canônica. Usefocus
efocusout
eventos, com manipuladores que configuram / liberam o elemento de foco atual e selecionam todos quando focados. Um exemplo angular2 / typescript é o seguinte (mas seria trivial para converter em vanilla js):Modelo:
Componente:
fonte