@Blender: No, esa pregunta se refiere a resaltar texto en un elemento, no en un área de texto. Los dos son bastante diferentes.
Tim Down
Respuestas:
194
Para evitar que el usuario se enfade cuando se selecciona todo el texto cada vez que intenta mover el cursor con el mouse, debe hacerlo usando el focusevento, no el clickevento. A continuación se hará el trabajo y las obras en torno a un problema en Chrome que previene la versión más simple (es decir, sólo llamar del área de texto select()método en un focuscontrolador de eventos) de trabajar.
<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>
Versión de 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;});});
Creo que es mejor implementar estas cosas usando un botón separado "seleccionar todo el texto", ya que seleccionar automáticamente el texto en los eventos de enfoque o clic es realmente molesto.
@zack: El ejemplo de jsFiddle en esta respuesta me funciona en Chrome. ¿No es para ti? Estoy de acuerdo en que la respuesta que vinculaste es más infalible.
Tim Down
@TimDown: tienes razón, estaba siendo un poco entusiasta; en realidad, funciona correctamente al hacer clic, pero falla si tabingresas al área de texto; la otra solución funciona para ambos casos :)
zack
Cambie ligeramente el código anterior y funcionará como un encanto ... $("#foo").mouseup(function() {$("#foo").unbind("mouseup");return false;}); debe consultar el cuadro de texto sin usarlo, thissimplemente
refiéralo
14
Mejor manera, con solución al problema de tab y Chrome y nueva forma 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;});}});
pero no sé cómo verificar si el texto ya está seleccionado, así que puedo revertir las dos acciones :(
Alex
1
@ Alex: No me metería demasiado con esto si fuera tú. Los usuarios esperan un comportamiento estándar de las áreas de texto.
Tim Down
no, este área de texto en particular solo está diseñada para copiar y pegar. todo el texto que tengo dentro es una gran cadena encriptada que solo se puede reemplazar por completo o copiar en el portapapeles
Alex
@ Alex: Ah, cierto. Es posible que desee que sea de solo lectura agregando el readonlyatributo a continuación.
Tim Down
1
@Hollister: No, es perfectamente posible que el usuario o el script seleccionen contenido dentro de un div. Probablemente esté pensando en copiar en el portapapeles, lo que no es posible en un script sin una biblioteca basada en Flash como ZeroClipboard.
Respuestas:
Para evitar que el usuario se enfade cuando se selecciona todo el texto cada vez que intenta mover el cursor con el mouse, debe hacerlo usando el
focus
evento, no elclick
evento. A continuación se hará el trabajo y las obras en torno a un problema en Chrome que previene la versión más simple (es decir, sólo llamar del área de textoselect()
método en unfocus
controlador de eventos) de trabajar.jsFiddle: http://jsfiddle.net/NM62A/
Código:
Versión de jQuery:
fuente
tab
ingresas al área de texto; la otra solución funciona para ambos casos :)$("#foo").mouseup(function() {
$("#foo").unbind("mouseup");
return false;
});
debe consultar el cuadro de texto sin usarlo,this
simplementeMejor manera, con solución al problema de tab y Chrome y nueva forma jquery
fuente
Terminé usando esto:
fuente
readonly
atributo a continuación.fuente
Versión jQuery ligeramente más corta:
Maneja la caja de la esquina de Chrome correctamente. Consulte http://jsfiddle.net/Ztyx/XMkwm/ para ver un ejemplo.
fuente
Seleccionar texto en un elemento (similar a resaltar con el mouse)
:)
Usando la respuesta aceptada en esa publicación, puede llamar a la función de esta manera:
fuente
$(this).select()
, lo usaré porque es menos código :)