¿Cómo se selecciona mediante programación el texto de un campo de entrada en dispositivos iOS, por ejemplo, iPhone, iPad con Safari móvil?
Normalmente es suficiente llamar a la .select()
función en el <input ... />
elemento, pero esto no funciona en esos dispositivos. El cursor simplemente se deja al final de la entrada existente sin realizar ninguna selección.
Respuestas:
input.setSelectionRange(0, 9999);
https://developer.mozilla.org/en/DOM/Input.select
fuente
.focus()
la entrada antes de invocarinput.setSelectionRange
. Si está escuchando elfocus
evento en la entrada, recuerde tener en cuenta un bucle infinito.readonly
atributo establecido.setSelectionRange()
a unfocus
controlador funciona cuando se activa mediante.focus()
programación, pero cuando toca manualmente la entrada de texto en iOS, la selección no ocurre. Basta decir que todo lo que necesita hacer es llamarsetSelectionRange()
dentro de un setTimeout de 0 y funciona como se esperaba sin importar qué desencadena el foco.Nada en este hilo funcionó para mí, esto es lo que funciona en mi iPad:
// t is the input field setTimeout(function() { t.setSelectionRange(0, 9999); }, 1);
fuente
Es difícil probar algo negativo, pero mi investigación sugiere que esto es un error en Mobile Safari.
Tenga en cuenta que focus () funciona, más o menos, aunque puede requerir más de un toque para tener éxito, y no es necesario si está tratando de responder al toque de un usuario en el campo en cuestión, ya que el toque en sí le dará al campo atención. Por desgracia, seleccione () es simplemente no funcional en Mobile Safari.
Su mejor apuesta puede ser un informe de error con Apple .
fuente
Vea este violín : (ingrese algo de texto en el cuadro de entrada y haga clic en 'seleccionar texto')
Es seleccionar texto en un cuadro de entrada en mi iPod (5.a generación iOS6.0.1), abrir el teclado y también mostrar el menú Cortar / Copiar / Sugerir ...
Usando javascript simple. No probé esto con jQuery
document.getElementById("p1").selectionStart = 0 document.getElementById("p1").selectionEnd = 999
Tenga en cuenta que el número 999 es solo una muestra. Debe establecer estos números en el número de caracteres que desea seleccionar.
ACTUALIZAR:
Para los dos últimos, puede experimentar activando un evento de clic en el
input
elementoACTUALIZACIÓN: (07-10-2013)
ACTUALIZACIÓN: (14-11-2013)
.selectionStart
y.selectionEnd
hace el trabajo.ACTUALIZACIÓN: (15-01-2015)
fuente
<input/>
haciendo tapping en tu , el iPad pensó que estaba haciendo tapping en el panel "CSS" de jsfiddle (donde todo lo que escribía era invisible). Una vez que haya dirigido mi toque a la dirección correcta<input/>
, el botón "seleccionar texto" funciona perfectamente bien en iOS-7.0.3 :-).Lo siento, en mi publicación anterior, no noté que Javascript implicaba que querías una respuesta en Javascript.
Para obtener lo que desea en UIWebView con javascript , me las arreglé para reunir dos piezas importantes de información para que funcione. No estoy seguro sobre el navegador móvil.
element.setSelectionRange(0,9999);
hace lo que queremosEl evento mouseUp deshace la selección.
Por lo tanto (usando Prototype):
Hace el truco.
Mate
fuente
$("input").focus(function () { this.setSelectionRange(0, 9999); return false; } ).mouseup( function () { return false; });
focusin
lugar de enfocar para que esto funcione, iOS 7Parece que el enfoque funcionará, pero solo cuando se llame directamente desde un evento nativo. llamar al foco usando algo como SetTimeout no aparece llamar al teclado. El control del teclado ios es muy deficiente. No es una buena situación.
fuente
Algo como lo siguiente me funciona en Webkit que viene con Android 2.2:
function trySelect(el) { setTimeout(function() { try { el.select(); } catch (e) { } }, 0); }
Consulte Chromium Issue 32865 .
fuente
Con iOS 7 en iPad, la única forma en que pude hacer que esto funcionara fue usar realmente en
<textarea></textarea>
lugar de<input>
campo.p.ej
<textarea onclick="this.setSelectionRange(0, 9999);">My text will be selected when textarea is clicked.</textarea>
Cómo evitar que el usuario cambie el texto dentro del área fue más difícil, ya que si hace que el área de texto sea de solo lectura, el truco de selección ya no funcionará.
fuente
Me volví loco buscando esta solución, mientras que todas sus respuestas ayudaron a abrir otra lata de gusanos para mí.
El cliente quería que el usuario pudiera hacer clic y seleccionar todo , y también dejar que el usuario 'tabulara' y seleccionara todo en el iPad (con un teclado externo. Lo sé, loco ...)
Mi solución a este problema fue reorganizar los eventos. Primero enfoque , luego haga clic , luego toque Inicio .
$('#myFUBARid').on('focus click touchstart', function(e){ $(this).get(0).setSelectionRange(0,9999); //$(this).css("color", "blue"); e.preventDefault(); });
Espero que esto ayude a alguien, ya que ustedes me han ayudado innumerables veces.
fuente
Si está utilizando navegadores compatibles con HTML5, puede utilizarlo
placeholder="xxx"
en suinput
etiqueta. Eso debería hacer el trabajo.fuente