Comment sélectionnez-vous par programme le texte d'un champ de saisie sur les appareils iOS, par exemple iPhone, iPad exécutant Safari mobile?
Normalement, il suffit d'appeler la .select()
fonction sur l' <input ... />
élément, mais cela ne fonctionne pas sur ces appareils. Le curseur est simplement laissé à la fin de l'entrée existante sans aucune sélection.
Réponses:
input.setSelectionRange(0, 9999);
https://developer.mozilla.org/en/DOM/Input.select
la source
.focus()
sur l'entrée avant d'appelerinput.setSelectionRange
. Si vous écoutez l'focus
événement sur l'entrée, n'oubliez pas de tenir compte d'une boucle infinie.readonly
attribut défini.setSelectionRange()
d'unfocus
gestionnaire fonctionne lorsque vous déclenchez par.focus()
programme, mais lorsque vous appuyez manuellement sur l'entrée de texte sur iOS, la sélection ne se produit pas. Qu'il suffise de dire, tout ce que vous avez à faire est d'appelersetSelectionRange()
dans un setTimeout de 0 et cela fonctionne comme prévu, peu importe ce qui déclenche le focus.Rien dans ce fil n'a fonctionné pour moi, voici ce qui fonctionne sur mon iPad:
// t is the input field setTimeout(function() { t.setSelectionRange(0, 9999); }, 1);
la source
Il est difficile de prouver un négatif, mais mes recherches suggèrent qu'il s'agit d'un bogue dans Mobile Safari.
Notez que focus () fonctionne, plus ou moins - bien que cela puisse nécessiter plus d'un tap pour réussir, et ce n'est pas nécessaire si vous essayez de répondre à un utilisateur tapant sur le champ en question car le tap lui-même donnera le champ concentrer. Malheureusement, select () n'est tout simplement pas fonctionnel dans Mobile Safari.
Votre meilleur pari peut être un rapport de bogue avec Apple .
la source
Voir ce violon : (entrez du texte dans la zone de saisie et cliquez sur 'sélectionner le texte')
Il sélectionne du texte dans une zone de saisie sur mon iPod (5e génération iOS6.0.1), ouvre le clavier et affiche également le menu Couper / Copier / Suggérer ...
Utilisation de javascript simple. Je n'ai pas essayé cela avec jQuery
document.getElementById("p1").selectionStart = 0 document.getElementById("p1").selectionEnd = 999
Notez que le nombre 999 n'est qu'un échantillon. Vous devez définir ces nombres sur le nombre de caractères que vous souhaitez sélectionner.
MISE À JOUR:
Pour les deux derniers, vous pouvez expérimenter en déclenchant un événement de clic sur l'
input
élémentMISE À JOUR: (07-10-2013)
MISE À JOUR: (14-11-2013)
.selectionStart
et.selectionEnd
ne fait le travail.MISE À JOUR: (15-01-2015)
la source
<input/>
, l'iPad pensait que je tapotais dans le volet «CSS» de jsfiddle (où tout ce que j'ai tapé était invisible). Une fois que j'ai eu mon robinet dirigé vers le bon<input/>
, votre bouton "sélectionner le texte" fonctionne parfaitement bien sur iOS-7.0.3 :-).Désolé, dans mon article précédent, je n'ai pas remarqué le Javascript impliquant que vous vouliez une réponse en Javascript.
Pour obtenir ce que vous voulez dans UIWebView avec javascript , j'ai réussi à rassembler deux informations importantes pour que cela fonctionne. Je ne suis pas sûr du navigateur mobile.
element.setSelectionRange(0,9999);
fait ce que nous voulonsL'événement mouseUp annule la sélection
Ainsi (en utilisant Prototype):
fait l'affaire.
Mat
la source
$("input").focus(function () { this.setSelectionRange(0, 9999); return false; } ).mouseup( function () { return false; });
focusin
au lieu de me concentrer pour que cela fonctionne, iOS 7Il semble que le focus fonctionnera, mais uniquement lorsqu'il est appelé directement à partir d'un événement natif. l'appel du focus en utilisant quelque chose comme SetTimeout n'apparaît pas appeler le clavier. Le contrôle du clavier ios est très médiocre. Ce n'est pas une bonne situation.
la source
Quelque chose comme ce qui suit fonctionne pour moi pour moi sur Webkit fourni avec Android 2.2:
function trySelect(el) { setTimeout(function() { try { el.select(); } catch (e) { } }, 0); }
Consultez le numéro 32865 de Chromium .
la source
Avec iOS 7 sur iPad, la seule façon dont j'ai pu faire ce travail était de l'utiliser
<textarea></textarea>
au lieu du<input>
champ.par exemple
<textarea onclick="this.setSelectionRange(0, 9999);">My text will be selected when textarea is clicked.</textarea>
Comment empêcher l'utilisateur de modifier le texte à l'intérieur de la zone était plus difficile, car si vous créez une zone de texte en lecture seule, l'astuce de sélection ne fonctionnera plus.
la source
Je suis devenu fou à la recherche de cette solution, alors que toutes vos réponses l'ont aidé à ouvrir une autre boîte de vers pour moi.
Le client voulait que l'utilisateur puisse tout cliquer et tout sélectionner , et aussi laisser l'utilisateur «tabuler» et tout sélectionner sur l'iPad (avec un clavier externe. Je sais, fou ...)
Ma solution à ce problème était de réorganiser les événements. Première mise au point , puis cliquez , puis touchez pour démarrer .
$('#myFUBARid').on('focus click touchstart', function(e){ $(this).get(0).setSelectionRange(0,9999); //$(this).css("color", "blue"); e.preventDefault(); });
J'espère que cela aide quelqu'un, car vous m'avez beaucoup aidé d'innombrables fois.
la source
Si vous utilisez des navigateurs compatibles HTML5, vous pouvez utiliser
placeholder="xxx"
dans votreinput
balise. Cela devrait faire le travail.la source