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 fonction .select()
sur le <input ... />
, mais cela ne fonctionne pas sur ces périphériques. Le curseur est simplement laissé à la fin de l'entrée existante sans sélection effectuée.
input.setSelectionRange(0, 9999);
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);
Il est difficile de prouver un résultat 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 qu'il puisse nécessiter plus d'un tap pour réussir, et ce n'est pas nécessaire si vous essayez de répondre à un tap sur le champ en question car le tap lui-même donnera le champ concentrer. Malheureusement, select () est simplement non fonctionnel dans Mobile Safari.
Votre meilleur pari peut être un rapport de bogue avec Apple .
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. N'a 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'élément input
MISE À JOUR: (07-10-2013)
MISE À JOUR: (14-11-2013)
.selectionStart
et .selectionEnd
fonctionne .MISE À JOUR: (15-01-2015)
Désolé, dans mon post 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 IWebView avec javascript, j'ai réussi à rassembler deux informations importantes pour le faire fonctionner. Pas sûr du navigateur mobile.
element.setSelectionRange(0,9999);
fait ce que nous voulons
l'événement mouseUp annule la sélection
Ainsi (en utilisant Prototype):
input.observe ('focus', function () { this.setSelectionRange (0, 9999); }); input.observe ('mouseup ', fonction (événement) { event.stop (); });
fait l'affaire.
Mat
Il semble que le focus fonctionne, mais uniquement lorsqu'il est directement appelé à partir d'un événement natif. appeler 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.
Avec iOS 7 sur iPad, le seul moyen pour que cela fonctionne est d'utiliser réellement le champ <textarea></textarea>
Au lieu du champ <input>
.
par exemple.
<textarea onclick="this.setSelectionRange(0, 9999);">My text will be selected when textarea is clicked.</textarea>
Il était plus difficile d'empêcher l'utilisateur de modifier le texte à l'intérieur de la zone, car si vous créez une zone de texte en lecture seule, l'astuce de sélection ne fonctionnera plus.
Je suis devenu fou à la recherche de cette solution, alors que toutes vos réponses ont aidé cela m'a ouvert une autre boîte de vers.
Le client voulait que l'utilisateur puisse cliquer et sélectionner tout, et aussi laisser l'utilisateur onglet ' '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. D'abord Focus, puis Click, puis touchstart.
$('#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, comme vous m'avez beaucoup aidé à maintes reprises.
Quelque chose comme ce qui suit fonctionne pour moi pour moi sur Webkit qui vient avec Android 2.2:
function trySelect(el) {
setTimeout(function() {
try {
el.select();
} catch (e) {
}
}, 0);
}
Voir Chrome Numéro 32865 .