@ Blender: Não, essa pergunta diz respeito a destacar texto em um elemento, não em uma área de texto. Os dois são bem diferentes.
Tim Baixo
Respostas:
194
Para impedir que o usuário fique irritado quando todo o texto for selecionado toda vez que tentar mover o cursor usando o mouse, faça isso usando o focusevento, não o clickevento. A seguir, o trabalho é feito e soluciona um problema no Chrome que impede a versão mais simples (ou seja, apenas chamar o select()método da área de texto em um focusmanipulador de eventos).
<textarea id="foo">Some text</textarea><script type="text/javascript">var textBox = document.getElementById("foo");
textBox.onfocus =function(){
textBox.select();// Work around Chrome's little problem
textBox.onmouseup =function(){// Prevent further mouseup intervention
textBox.onmouseup =null;returnfalse;};};</script>
versão jQuery:
$("#foo").focus(function(){var $this = $(this);
$this.select();// Work around Chrome's little problem
$this.mouseup(function(){// Prevent further mouseup intervention
$this.unbind("mouseup");returnfalse;});});
Eu acho que é melhor implementar essas coisas usando um botão "selecionar todo o texto" separado, pois selecionar o texto automaticamente nos eventos de foco ou clique é realmente irritante.
@zack: O exemplo jsFiddle nesta resposta funciona para mim no Chrome. Não é para você? Concordo que a resposta que você vinculou é mais infalível.
Tim Down
@ TimDown: você está certo, eu estava sendo um pouco zeloso - na verdade, ele funciona corretamente com o 'clique', mas falha se você tabentrar na área de texto - a sua outra solução funciona para os dois casos :)
zack
Alterar o código acima um pouco e ele vai funcionar como um encanto .. $("#foo").mouseup(function() {$("#foo").unbind("mouseup");return false;}); você precisa para se referir a caixa de texto sem usar thisapenas apresentá-lo com a localização completa .. e ele vai funcionar ..
pratikabu
14
Melhor maneira, com solução para problema de tabulação e cromo e nova maneira de jquery
$("#element").on("focus keyup",function(e){var keycode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;if(keycode ===9||!keycode){// Hacemos selectvar $this = $(this);
$this.select();// Para Chrome's que da problema
$this.on("mouseup",function(){// Unbindeamos el mouseup
$this.off("mouseup");returnfalse;});}});
mas eu não sei como verificar se o texto já está selecionado, para que eu possa reverter as duas ações :(
Alex
1
@ Alex: Eu não mexeria muito com isso se fosse você. Os usuários esperam um comportamento padrão das áreas de texto.
Tim Baixo
não, essa área de texto específica destina-se apenas a copiar e colar. todo o texto que tenho aqui dentro é uma grande corda encryted que só pode tanto ser totalmente substituídas, ou copiados para o clipboard
Alex
@ Alex: Ah, certo. Você pode querer torná-lo somente leitura adicionando o readonlyatributo então.
Tim Baixo
1
@ Hollister: Não, é perfeitamente possível que o usuário ou o script selecione o conteúdo dentro de uma div. Você provavelmente está pensando em copiar para a área de transferência, o que não é possível no script sem uma biblioteca baseada em Flash como o ZeroClipboard.
Respostas:
Para impedir que o usuário fique irritado quando todo o texto for selecionado toda vez que tentar mover o cursor usando o mouse, faça isso usando o
focus
evento, não oclick
evento. A seguir, o trabalho é feito e soluciona um problema no Chrome que impede a versão mais simples (ou seja, apenas chamar oselect()
método da área de texto em umfocus
manipulador de eventos).jsFiddle: http://jsfiddle.net/NM62A/
Código:
versão jQuery:
fonte
tab
entrar na área de texto - a sua outra solução funciona para os dois casos :)$("#foo").mouseup(function() {
$("#foo").unbind("mouseup");
return false;
});
você precisa para se referir a caixa de texto sem usarthis
apenas apresentá-lo com a localização completa .. e ele vai funcionar ..Melhor maneira, com solução para problema de tabulação e cromo e nova maneira de jquery
fonte
Acabei usando isso:
fonte
readonly
atributo então.fonte
Versão jQuery ligeiramente mais curta:
Ele lida com a caixa de canto do Chrome corretamente. Veja http://jsfiddle.net/Ztyx/XMkwm/ para um exemplo.
fonte
Selecionando texto em um elemento (semelhante ao destaque com o mouse)
:)
Usando a resposta aceita nesse post, você pode chamar a função assim:
fonte
$(this).select()
, eu vou usar isso porque é menos código :)