Tengo el siguiente código para mostrar un cuadro de texto en una página web HTML.
<input type="text" id="userid" name="userid" value="Please enter the user ID" />
Cuando aparece la página, el texto contiene el mensaje Por favor ingrese el ID de usuario . Sin embargo, descubrí que el usuario debe hacer clic 3 veces para seleccionar todo el texto (en este caso es Por favor ingrese la ID de usuario ).
¿Es posible seleccionar todo el texto con solo un clic?
Editar:
Lo siento, olvidé decir: debo usar la entrada type="text"
javascript
html
textinput
Preguntas
fuente
fuente
<label>
para la etiqueta y no elvalue
. Puede usar JS y CSS para que se vea igual, sin ser tan antisentico. dorward.me.uk/tmp/label-work/example.html tiene un ejemplo usando jQuery.Respuestas:
Puede usar este fragmento de JavaScript:
Pero aparentemente no funciona en Safari móvil. En esos casos puedes usar:
fuente
this.id
como argumento para el controlador de clics. Mejor aún, podría eliminarlo porgetElementById
completo y pasarlothis
como argumento.this.setSelectionRange(0, this.value.length)
en su lugar.Las soluciones publicadas anteriormente tienen dos peculiaridades:
Aquí hay una solución completa que selecciona todo el texto en foco, pero permite seleccionar un punto de cursor específico después del foco.
fuente
.on('blur', 'input', function(){focusedElement = null;})
0
trabajos para mí en Chrome y Firefox. no estoy seguro de dónde50
viene su tiempo de espera .HTML (tendrá que poner el atributo onclick en cada entrada para la que desea que funcione en la página)
O UNA MEJOR OPCIÓN
jQuery (esto funcionará para cada entrada de texto en la página, no es necesario cambiar su html):
fuente
Sé que esto es antiguo, pero la mejor opción es usar el nuevo
placeholder
atributo HTML si es posible:Esto hará que el texto se muestre a menos que se ingrese un valor, eliminando la necesidad de seleccionar texto o borrar entradas.
fuente
Las respuestas enumeradas son parciales según yo. He vinculado a continuación dos ejemplos de cómo hacer esto en Angular y con JQuery.
Esta solución tiene las siguientes características:
JQuery: http://plnkr.co/edit/VZ0o2FJQHTmOMfSPRqpH?p=preview
Angular: http://plnkr.co/edit/llcyAf?p=preview
fuente
Tratar:
Funciona muy bien para mí.
fuente
Siempre puede usar
document.execCommand
( compatible con todos los principales navegadores )Selecciona todo el texto en el elemento actualmente enfocado.
fuente
<input type="text" onclick="document.execCommand('selectall',null,false);" />
contenteditable
elementos también. Creo que también puede hacerlo aún un poco más elegante, es decir<input type="text" onfocus="document.execCommand('selectall')">
, bastante seguro de que puede eliminar elnull
yfalse
si no los usa.onfocus
Parece mejor queonclick
. y sí, uno puede acabar connull
yfalse
. ¡Gracias!onfocus
, se selecciona toda la página cuando se hace clic en la entrada en Chrome.onclick
funciona bien.enfoque automático de entrada, con evento onfocus:
Esto le permite abrir un formulario con el elemento deseado seleccionado. Funciona usando el enfoque automático para presionar la entrada, que luego se envía a sí mismo un evento de enfoque, que a su vez selecciona el texto.
fuente
Nota: Cuando considere
onclick="this.select()"
, en el primer clic, se seleccionarán todos los caracteres, después de eso quizás desee editar algo en la entrada y haga clic entre los caracteres nuevamente, pero seleccionará todos los caracteres nuevamente. Para solucionar este problema, debe usarlo enonfocus
lugar deonclick
.fuente
De hecho, use
onclick="this.select();"
pero recuerde no combinarlodisabled="disabled"
: no funcionará en ese momento y deberá seleccionar manualmente o hacer clic múltiple para seleccionar, aún. Si desea bloquear el valor del contenido que se seleccionará, combine con el atributoreadonly
.fuente
Aquí hay una versión reutilizable de la respuesta de Shoban:
De esa manera, puede reutilizar el script claro para múltiples elementos.
fuente
Usted puede reemplazar
Con:
El marcador de posición se usa para reemplazar el valor como deseaba que las personas pudieran escribir en el cuadro de texto sin tener que hacer clic varias veces o usar Ctrl + a. El marcador de posición hace que no sea un valor, sino que como su nombre indica, un marcador de posición. Eso es lo que se usa en múltiples formularios en línea que dicen "Nombre de usuario aquí" o "Correo electrónico" y cuando hace clic en él, el "Correo electrónico" desaparece y puede comenzar a escribir de inmediato.
fuente
La solución exacta a lo que preguntaste es:
Pero supongo que está tratando de mostrar "Ingrese la ID de usuario" como marcador de posición o sugerencia en la entrada. Por lo tanto, puede usar lo siguiente como una solución más eficiente:
fuente
Aquí hay un ejemplo en React, pero se puede traducir a jQuery en vanilla JS si lo prefiere:
El truco aquí es usarlo
onMouseDown
porque el elemento ya ha recibido el foco cuandoactiveElement
se activa el evento "clic" (y, por lo tanto, la comprobación fallará).La
activeElement
verificación es necesaria para que el usuario pueda colocar el cursor donde lo desee sin tener que volver a seleccionar constantemente la entrada completa.El tiempo de espera es necesario porque, de lo contrario, el texto se seleccionará y luego no se seleccionará instantáneamente, ya que supongo que el navegador realiza la verificación de posicionamiento del cursor.
Y, por último,
el = ev.currentTarget
es necesario en React porque React reutiliza los objetos de evento y perderá el evento sintético cuando se active setTimeout.fuente
El problema con la captura del evento de clic es que cada clic posterior dentro del texto lo seleccionará nuevamente, mientras que el usuario probablemente esperaba reposicionar el cursor.
Lo que funcionó para mí fue declarar una variable, selectSearchTextOnClick y establecerla en true de forma predeterminada. El controlador de clic comprueba que la variable sigue siendo verdadera: si es así, la establece en falsa y realiza la selección (). Luego tengo un controlador de eventos de desenfoque que lo restablece a verdadero.
Los resultados hasta ahora parecen ser el comportamiento que esperaba.
(Editar: Olvidé decir que había intentado atrapar el evento de enfoque como alguien sugirió, pero eso no funciona: después de que se active el evento de enfoque, el evento de clic puede activarse, deseleccionando inmediatamente el texto).
fuente
Esta pregunta tiene opciones para cuando .select () no funciona en plataformas móviles: selección de texto mediante programación en un campo de entrada en dispositivos iOS (Safari móvil)
fuente
HTML como este
<input type="text" value="click the input to select" onclick="javascript:textSelector(this)"/>
y código javascript sin enlace
fuente
Bueno, esta es una actividad normal para un TextBox.
Haga clic en 1 - Establecer foco
Haga clic en 2/3 (doble clic) - Seleccionar texto
Puede establecer el foco en TextBox cuando la página se carga por primera vez para reducir la "selección" a un solo evento de doble clic.
fuente
Use "marcador de posición" en lugar de "valor" en su campo de entrada.
fuente
Si está utilizando AngularJS, puede usar una directiva personalizada para facilitar el acceso:
Ahora uno puede usarlo así:
La muestra es con requirejs, por lo que la primera y la última línea se pueden omitir si se usa otra cosa.
fuente
Si alguien quiere hacer esto en la página de carga con jQuery (ideal para campos de búsqueda) aquí está mi solución
Basado en esta publicación. Gracias a CSS-Tricks.com
fuente
Si solo está tratando de tener un texto de marcador de posición que se reemplaza cuando un usuario selecciona el elemento, entonces obviamente es la mejor práctica usar el
placeholder
atributo hoy en día. Sin embargo, si desea seleccionar todo el valor actual cuando un campo gana foco, entonces una combinación de respuestas @Cory House y @Toastrackenigma parece ser la más canónica. Usofocus
yfocusout
eventos, con controladores que configuran / liberan el elemento de enfoque actual, y seleccionan todos cuando están enfocados. Un ejemplo angular2 / typecript es el siguiente (pero sería trivial convertir a vanilla js):Modelo:
Componente:
fuente