¿Qué es una solución Vanilla JS o jQuery que seleccionará todos los contenidos de un cuadro de texto cuando el cuadro de texto reciba el foco?
javascript
jquery
user-interface
Jon Erickson
fuente
fuente
Respuestas:
fuente
fuente
onmouseup="return false;"
si desea que el usuario pueda seleccionar y editar libremente el texto después de enfocarse dentro del cuadro de texto. Con este código, el texto quedará bloqueado en una situación de "seleccionar todo" y el usuario no podrá editarlo a menos que el usuario escriba un texto nuevo o use las teclas de flecha para moverse. Honestamente, esto se siente como un comportamiento muy extraño y no tendría sentido a menos que el cuadro de texto no sea editable permanentemente (y, por lo tanto, esté deshabilitado).onmouseup="return false;"
si simplemente desea que la selección que se produzca cuando el usuario primeros clics o pestañas. ¡Y +1 para el Javascript de vainilla!fuente
fuente
mouseup
evento: "una vez que el cursor está en el campo, hacer clic en algún lugar dentro del texto seleccionado para colocar el cursor allí no funciona; los clics están efectivamente desactivados. Sin embargo, para situaciones en las que es deseable seleccionar todo el texto en foco, probablemente sea el menor de dos males ".jQuery no es JavaScript, que es más fácil de usar en algunos casos.
Mira este ejemplo:
Fuente: CSS Tricks , MDN
fuente
Esto no es solo un problema de Chrome / Safari, experimenté un comportamiento bastante similar con Firefox 18.0.1. ¡La parte divertida es que esto no sucede en MSIE! El problema aquí es el primer evento de mouseup que obliga a deseleccionar el contenido de entrada, así que simplemente ignore la primera ocurrencia.
El enfoque timeOut causa un comportamiento extraño, y al bloquear cada evento de mouseup no puede eliminar la selección haciendo clic nuevamente en el elemento de entrada.
fuente
HTML:
Usando JS:
Usando JQuery:
Usando React JS:
En el componente respectivo dentro de la función de renderizado -
fuente
onFocus={(e) => e.target.select()}
mi solución es usar un tiempo de espera. Parece funcionar bien
fuente
Esto también funcionará en iOS:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/select
fuente
Sé que el código en línea es de mal estilo, pero no quería poner esto en un archivo .js. Funciona sin jQuery!
fuente
Las respuestas aquí me ayudaron hasta cierto punto, pero tuve un problema en los campos de entrada de Número HTML5 al hacer clic en los botones arriba / abajo en Chrome.
Si hace clic en uno de los botones y deja el mouse sobre el botón, el número seguiría cambiando como si estuviera presionando el botón del mouse porque el mouseup se estaba descartando.
Resolví esto eliminando el controlador de mouseup tan pronto como se activó de la siguiente manera:
Espero que esto ayude a las personas en el futuro ...
fuente
mouseup
para los campos de entrada de texto y no paranumber
s. Por lo tanto, este problema no debería surgirEsto funcionará, prueba esto -
Funciona en Safari / IE 9 y Chrome, aunque no tuve la oportunidad de probar en Firefox.
fuente
Sé que ya hay muchas respuestas aquí, pero esta falta hasta ahora; Una solución que también funciona con contenido generado ajax:
fuente
Pude mejorar ligeramente la respuesta de Zach al incorporar algunas llamadas a funciones. El problema con esa respuesta es que deshabilita onMouseUp por completo, evitando así que haga clic en el cuadro de texto una vez que está enfocado.
Aquí está mi código:
Esta es una ligera mejora con respecto a la respuesta de Zach. Funciona perfectamente en IE, no funciona en Chrome y funciona con éxito alternativo en FireFox (literalmente en cualquier otro momento). Si alguien tiene una idea de cómo hacer que funcione de manera confiable en FF o Chrome, compártala.
De todos modos, pensé que compartiría lo que pudiera para hacer esto un poco más agradable.
fuente
onMouseUp=""
yonMouseDown=""
no son el estándar w3 correcto. Deberían seronmouseup=""
yonmousedown=""
. Al igual que con otros atributos html, deben escribirse en minúsculas y no en camello.Al igual que @Travis y @Mari, quería seleccionar automáticamente cuando el usuario hizo clic, lo que significa evitar el comportamiento predeterminado de un
mouseup
evento, pero no evitar que el usuario haga clic. La solución que se me ocurrió, que funciona en IE11, Chrome 45, Opera 32 y Firefox 29 (estos son los navegadores que tengo instalados actualmente), se basa en la secuencia de eventos involucrados en un clic del mouse.Cuando hace clic en una entrada de texto que no tiene foco, obtiene estos eventos (entre otros):
mousedown
: En respuesta a tu clic. Aumentos de manejo predeterminadosfocus
si es necesario y establece el inicio de la selección.focus
: Como parte del manejo predeterminado demousedown
.mouseup
: La finalización de su clic, cuyo manejo predeterminado establecerá el final de la selección.Cuando hace clic en una entrada de texto que ya tiene foco,
focus
se omite el evento. Como @Travis y @Mari notaron astutamente, el manejo predeterminado de lasmouseup
necesidades debe evitarse solo sifocus
se produce el evento. Sin embargo, como no hay unfocus
evento "no sucedió", debemos inferir esto, lo que podemos hacer dentro delmousedown
controlador.La solución de @ Mari requiere que se importe jQuery, lo que quiero evitar. La solución de @ Travis hace esto mediante la inspección
document.activeElement
. No sé exactamente por qué su solución no funciona en todos los navegadores, pero no hay otra manera de realizar un seguimiento de si la entrada de texto tiene el foco: sólo tiene que seguir sufocus
eblur
eventos.Aquí está el código que funciona para mí:
Espero que esto sea de ayuda para alguien. :-)
fuente
fuente
Solo necesita agregar el siguiente atributo:
Por ejemplo:
(Honestamente, no tengo idea de por qué necesitarías algo más).
fuente
Esto funcionó para mí (publicar ya que no está en las respuestas sino en un comentario)
fuente
Editar: según la solicitud de @ DavidG, no puedo proporcionar detalles porque no estoy seguro de por qué funciona, pero creo que tiene algo que ver con el evento de enfoque que se propaga hacia arriba o hacia abajo o lo que sea que haga y el elemento de entrada que recibe la notificación Ha recibido el foco. Establecer el tiempo de espera le da al elemento un momento para darse cuenta de que lo ha hecho.
fuente
Si encadena los eventos juntos, creo que elimina la necesidad de usar
.one
como se sugiere en otra parte de este hilo.Ejemplo:
fuente
Nota: Si está programando en ASP.NET, puede ejecutar el script usando ScriptManager.RegisterStartupScript en C #:
O simplemente escriba el script en la página HTML sugerida en las otras respuestas.
fuente
Siembro este en algún lugar, ¡funciona perfectamente!
fuente
Llego tarde a la fiesta, pero esto funciona perfectamente en IE11, Chrome, Firefox, sin estropear el mouseup (y sin JQuery).
fuente
focus
tabulando en el campo, encontrará múltiples oyentes de eventos de mouseup adjuntando ...Mi solución es la siguiente:
Por lo tanto, el mouseup funcionará normalmente, pero no anulará la selección después de obtener el foco por entrada
fuente