jquery entrée sélectionner tout dans le focus
Je suis en utilisant ce code pour essayer et sélectionnez tout le texte dans le champ lorsqu'un utilisateur se concentre sur le terrain. Ce qui se passe, il sélectionne tous pour une seconde, puis son désactivée et le typage curseur est à gauche, où j'ai cliqué...
$("input[type=text]").focus(function() {
$(this).select();
});
Je veux tout pour rester sélectionnées.
- Ce navigateur, il semble fonctionner OK pour moi, en FF?
- Chrome = échec pour celui-ci
- J'ai été en utilisant Chrome, mais .cliquez sur() permet de résoudre le problème 🙂
- Remarque: La accepté de répondre ici ne résout qu'une partie du problème. Il fait de la sélectionner de travail, mais il est difficile de l'onu,-sélectionnez avec les clics suivants. Une meilleure solution peut être trouvée ici: stackoverflow.com/questions/3380458/...
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser
click
au lieu defocus
. Il semble que cela fonctionne pour les deux souris et des événements clés (au moins sur Chrome/Mac):jQuery < la version 1.7:
la version jQuery 1.7+:
Voici une démo
$(document).on("click", "input[type='text']", function () { $(this).select(); });
bind
le travail est tous les mêmeon
click
surfocus
pour fixer les deux Colin Breame du problème et @HelinWang 'sJe pense que ce qui se passe est: est-ce
Une solution de contournement peut-être appeler le select() de façon asynchrone, afin qu'elle s'exécute complètement après le focus():
this
est un peu inattendu dans ces champs. Je vais mettre à jour le code.10
.Je pense que c'est la meilleure solution. À la différence, il suffit de sélectionner dans l'événement onclick, il n'empêche pas la sélection/édition de texte avec la souris. Il fonctionne avec les principaux moteurs de rendu, y compris IE8.
http://jsfiddle.net/25Mab/9/
select()
semble fonctionner bien.$('input[autofocus]').select();
Il y a quelques décent réponses ici et @user2072367 s 'est mon préféré, mais il a un résultat inattendu, quand vous vous concentrez via l'onglet plutôt que via un clic. ( résultat inattendu: pour sélectionner le texte normalement après le focus via l'onglet, vous devez cliquer sur un temps supplémentaire )
Ce violon correctifs petit bug et de plus les magasins de $(this) dans une variable pour éviter les doublons DOM sélection. Check it out! (:
Testé dans IE > 8
Après un examen attentif, je propose ceci comme solution de nettoyage au sein de ce thread:
La démo en jsFiddle
Le Problème:
Voici un peu d'explication:
Tout d'abord, jetons un coup d'oeil à l'ordre des événements lorsque vous déplacez la souris ou d'un onglet dans un champ.
Nous pouvons nous connecter tous les événements comme ceci:
Certains navigateurs tentative pour positionner le curseur au cours de la
mouseup
ouclick
événements. Ce qui est logique puisque vous voudrez peut-être commencer le curseur dans une position et faites-le glisser sur pour mettre en surbrillance du texte. Il ne peut pas faire une désignation sur la position du curseur jusqu'à ce que vous avez fait levé la souris. Donc les fonctions qui gèrent lesfocus
sont condamnés à réagir trop tôt, laissant le navigateur pour remplacer votre positionnement.Mais le hic, c'est que nous voulons vraiment pour gérer les événements de focus. Il nous permet de connaître la première fois que quelqu'un est entré dans le domaine. Après ce point, nous ne voulons pas continuer à ignorer le comportement de la sélection de l'utilisateur.
La Solution:
Au lieu de cela, à l'intérieur de la
focus
gestionnaire d'événements, nous pouvons joindre rapidement des auditeurs pour laclick
(cliquez sur) etkeyup
(onglet) les événements qui sont sur le point de feu.Nous ne voulons déclencher l'événement une fois. Nous pourrions utiliser
.one("click keyup)
, mais ce serait appeler le gestionnaire d'événements une fois pour chaque type d'événement. Au lieu de cela, dès que mouseup ou keyup est pressé, nous allons appeler notre fonction. La première chose que nous allons faire est de retirer les gestionnaires pour les deux. De cette façon, il ne sera pas question de savoir si nous avons à onglets ou on passe la souris en. La fonction doit exécuter exactement une fois.Maintenant, nous pouvons faire appel
select()
après le navigateur a fait sa sélection, nous sommes donc assurez-vous de remplacer le comportement par défaut.Enfin, pour une protection supplémentaire, nous pouvons ajouter événement d'espaces de noms à la
mouseup
etkeyup
fonctions de sorte que le.off()
méthode ne supprime pas les autres auditeurs qui pourraient être en jeu.Testé dans IE 10+, FF 28+, & Chrome 35+
Alternativement, si vous voulez prolonger la durée de jQuery avec un fonction appelée
une fois
qui va déclencher exactement une fois pour n'importe quel nombre d'événements:Ensuite, vous pouvez simplifier le code comme ceci:
La démo en violon
click
événement qui est encore dans le pipeline demouseup
. Puisque nous voulons gérer la fin de la sélection le plus tard possible pour nous donner le plus de chances d'annuler le navigateur, cliquez sur l'aide de la place de mouseup devrait faire l'affaire. Testé dans FF, Chrome et IE.off
prend soin à la fois de toute façon. Voir ma question: la fonction qui va déclencher exactement une fois pour n'importe quel nombre d'événementsCe serait faire le travail et d'éviter le problème que vous ne pouvez plus sélectionner une partie du texte avec la souris.
Cette version fonctionne sur ios et corrige standard faites glisser la sélection sur windows chrome
http://jsfiddle.net/Zx2sc/2/
Le problème avec la plupart de ces solutions est qu'elles ne fonctionnent pas correctement lors de la modification de la position du curseur dans le champ de saisie.
La
onmouseup
cas de changements de la position du curseur dans le champ, qui est déclenché aprèsonfocus
(au moins au sein de Chrome et FF). Si vous inconditionnellement jeter lemouseup
l'utilisateur ne peut pas modifier la position du curseur avec la souris.Le code conditionnellement à prévenir la
mouseup
comportement par défaut si le champ n'a pas actuellement le focus. Il travaille pour ces cas:J'ai testé ce dans google Chrome 31, FF 26 et IE 11.
Trouvé un génial solution de lecture ce fil
Utilisation clearTimeout pour plus de sécurité si vous basculez rapidement entre les deux signaux d'entrée..
clearTimeout à nettoyer la vieille timeout...
Je suis venue à partir de la fin 2016 et ce code fonctionne dans les dernières versions de jquery (jquery-2.1.3.js dans le cas présent).
j'utilise FF 16.0.2 et jquery 1.8.3, tout le code dans la réponse n'a pas de travail.
Je utiliser un code comme ceci et de travail.
$("input[type=text]").on('click', function () { $(this).focus.select(); })
est à l'origine de l'orientation et la sélection se produire lorsque l'utilisateur clique sur la case, parce que c'est exécutée lorsque l'utilisateur clique sur la boîte. Sans le gestionnaire d'événements, le code n'a pas répondu à la question, d'où le downvote et de commentaires. Fondamentalement, vous avez obtenu le "tous les le texte actuel est sélectionné" mais pas le "quand il sélectionne le champ" partie.Ou vous pouvez simplement utiliser
<input onclick="select()">
Fonctionne parfaitement.$.ready
n'est pas correct. Vous avez besoin de passer d'une fonction à elle pour faire retarder laattr
jusqu'à ce que le document est prêt. Vous le faites immédiatement puis passage de l'élément de la collection de$.ready
.addEventListener
.Vous pouvez utiliser un code simple:
Fonctionne très bien avec le JavaScript natif
select()
.ou en général: