J'utilise ce code pour essayer de sélectionner tout le texte dans le champ lorsqu'un utilisateur se concentre sur le champ. Ce qui se passe, c'est qu'il sélectionne tout pendant une seconde, puis il n'est pas sélectionné et le curseur de frappe est laissé là où j'ai cliqué ...
$("input[type=text]").focus(function() {
$(this).select();
});
Je veux que tout reste sélectionné.
Réponses:
Essayez d'utiliser
click
au lieu defocus
. Il semble fonctionner à la fois pour la souris et les événements clés (au moins sur Chrome / Mac):jQuery <version 1.7:
jQuery version 1.7+:
Voici une démo
la source
Je pense que ce qui se passe est le suivant:
Une solution de contournement peut appeler le select () de manière asynchrone, afin qu'il s'exécute complètement après focus ():
la source
this
est un peu inattendue dans de telles étendues. Je vais mettre à jour le code.Je pense que c'est une meilleure solution. Contrairement à la simple sélection dans un événement onclick, cela n'empêche pas la sélection / modification de texte avec la souris. Il fonctionne avec les principaux moteurs de rendu, notamment IE8.
http://jsfiddle.net/25Mab/9/
la source
select()
semble cependant fonctionner.$('input[autofocus]').select();
Il y a des réponses décentes ici et @ user2072367 est ma préférée, mais elle a un résultat inattendu lorsque vous vous concentrez via l'onglet plutôt que via le clic. (résultat inattendu: pour sélectionner le texte normalement après la mise au point via l'onglet, vous devez cliquer une fois de plus)
Ce violon corrige ce petit bogue et stocke en outre $ (ceci) dans une variable pour éviter la sélection DOM redondante. Vérifiez-le! (:
Testé dans IE> 8
la source
Après un examen attentif, je propose cela comme une solution beaucoup plus propre dans ce fil:
Démo dans jsFiddle
Le problème:
Voici quelques explications:
Tout d'abord, jetons un œil à l'ordre des événements lorsque vous passez la souris ou tabulez dans un champ.
Nous pouvons enregistrer tous les événements pertinents comme celui-ci:
Certains navigateurs tentent de positionner le curseur pendant les événements
mouseup
ouclick
. Cela est logique, car vous souhaiterez peut-être démarrer le curseur dans une position et le faire glisser pour mettre du texte en surbrillance. Il ne peut pas faire de désignation sur la position du curseur tant que vous n'avez pas levé la souris. Les fonctions qui gèrentfocus
sont donc destinées à répondre trop tôt, laissant le navigateur remplacer votre positionnement.Mais le hic, c'est que nous voulons vraiment gérer l'événement focus. Il nous permet de savoir la première fois que quelqu'un est entré sur le terrain. Après ce point, nous ne voulons pas continuer à remplacer le comportement de sélection des utilisateurs.
La solution:
Au lieu de cela, dans le
focus
gestionnaire d'événements, nous pouvons rapidement attacher des écouteurs pourclick
(cliquer) etkeyup
événements (tabuler) qui sont sur le point de se déclencher.Nous ne voulons déclencher l'événement qu'une seule fois. Nous pourrions utiliser
.one("click keyup)
, mais cela appellerait le gestionnaire d'événements une fois pour chaque type d'événement . Au lieu de cela, dès que la souris ou la touche est enfoncée, nous appelons notre fonction. La première chose que nous ferons est de supprimer les gestionnaires pour les deux. De cette façon, peu importe que nous tabulions ou que nous entrions dans la souris. La fonction devrait s'exécuter exactement une fois.Maintenant, nous pouvons appeler
select()
après que le navigateur a fait sa sélection, donc nous sommes sûrs de remplacer le comportement par défaut.Enfin, pour une protection supplémentaire, nous pouvons ajouter des espaces de noms d'événements aux fonctions
mouseup
etkeyup
afin que la.off()
méthode ne supprime aucun autre écouteur qui pourrait être en jeu.Testé dans IE 10+, FF 28+ et Chrome 35+
Alternativement, si vous souhaitez étendre jQuery avec une fonction appelée
once
qui se déclenchera exactement une fois pour un certain nombre d'événements :Ensuite, vous pouvez simplifier davantage le code comme ceci:
Démo au violon
la source
click
événement qui est plus bas dans le pipeline quemouseup
. Étant donné que nous voulons gérer la fin de la sélection le plus tard possible pour nous donner le plus de chances de remplacer le navigateur, utiliser le clic au lieu de la souris devrait faire l'affaire. Testé dans FF, Chrome et IE.one
ne le coupera pas comme "Le gestionnaire est exécuté une fois par élément par type d'événement . Il désactivera automatiquement l'événement qui l'a déclenché, mais l'autre persistera toujours etoff
prendra soin des deux de toute façon. Voir mon question: fonction qui se déclenchera exactement une fois pour un nombre quelconque d'événementsCela ferait le travail et éviterait le problème que vous ne pouvez plus sélectionner une partie du texte avec la souris.
la source
Cette version fonctionne sur iOS et corrige également le glisser-sélectionner standard sur Windows Chrome
http://jsfiddle.net/Zx2sc/2/
la source
Le problème avec la plupart de ces solutions est qu'elles ne fonctionnent pas correctement lors du changement de position du curseur dans le champ de saisie.
L'
onmouseup
événement modifie la position du curseur dans le champ, qui est déclenché aprèsonfocus
(au moins dans Chrome et FF). Si vous supprimez inconditionnellement le,mouseup
l'utilisateur ne peut pas modifier la position du curseur avec la souris.Le code empêchera conditionnellement le
mouseup
comportement par défaut si le champ n'a pas actuellement le focus. Cela fonctionne pour ces cas:J'ai testé cela dans Chrome 31, FF 26 et IE 11.
la source
Trouvé une solution géniale en lisant ce fil
la source
Je viens de fin 2016 et ce code ne fonctionne que dans les versions récentes de jquery (jquery-2.1.3.js dans ce cas).
la source
Si j'utilise FF 16.0.2 et jquery 1.8.3, tout le code de la réponse n'a pas fonctionné.
J'utilise du code comme celui-ci et je travaille.
la source
$("input[type=text]").on('click', function () { $(this).focus.select(); })
provoque le focus et la sélection lorsque l'utilisateur clique sur la zone, car il est exécuté lorsque l'utilisateur clique sur la zone. Sans le gestionnaire d'événements, le code ne répond pas à la question, d'où le downvote et le commentaire. Fondamentalement, vous avez obtenu la partie "tout le texte actuel est sélectionné" mais pas la partie "lorsqu'il sélectionne le champ".Utilisez clearTimeout pour plus de sécurité si vous basculez rapidement entre deux entrées. ClearTimeout nettoie l'ancien timeout ...
la source
Fonctionne très bien avec le JavaScript natif
select()
.ou en général:
la source
Ou vous pouvez simplement utiliser
<input onclick="select()">
Works perfect.la source
Vous pouvez utiliser un code simple:
la source
la source
$.ready
n'est pas correct. Vous devez lui passer une fonction pour la retarderattr
jusqu'à ce que le document soit prêt. Vous le faites immédiatement, puis passez la collection d'éléments à$.ready
.addEventListener
.J'utilise toujours
requestAnimationFrame()
pour sauter par-dessus les mécanismes internes post-événement et cela fonctionne parfaitement dans Firefox. N'ont pas été testés dans Chrome.la source