Sélectionnez le texte sur le focus d'entrée
J'ai une saisie de texte. Lorsque l'entrée reçoit le focus, je veux sélectionner le texte à l'intérieur de l'entrée.
Avec jQuery je voudrais faire de cette façon:
<input type="text" value="test" />
$("input[type=text]").click(function() {
$(this).select();
//would select "test" in this example
});
J'ai cherché partout pour essayer de trouver l'angle de façon mais la plupart des exemples, je suis la recherche de traiter avec une directive qui est de regarder un modal de la propriété pour un changement. Je suppose que j'ai besoin d'une directive qui est de regarder pour une entrée qui reçoit le focus. Comment dois-je procéder?
- Je comprends que vous voulez trouver une Angulaire manière", cependant est-il une raison vous ne serait pas juste de ne
<input type="text" value="test" onclick="this.select()" />
?
Vous devez vous connecter pour publier un commentaire.
Le moyen de le faire dans Angulaire est de créer un personnalisé directive qui ne le autoselect pour vous.
Appliquer la directive comme ceci:
Voir la démo
Update1: suppression de jQuery dépendance.
Update2: Restreindre l'attribut.
Update3: Fonctionne dans le navigateur Safari mobile. Permet de sélectionner une partie du texte (nécessite IE>8).
restrict: 'A'
), que la présente directive vise à étendre le comportement d'un élément existant.selectOnLoad
directive lien(). Mais dans le lien(), bien que la portée est déjà rempli, élément DOM n'est pas encore synchronisé avec $portée, donc quand je l'appel select(), l'élément est toujours vide et rien n'est sélectionné. La seule façon de contourner que j'ai trouvé, est de $timeout, mais j'ai l'impression que peut cesser de travailler avec une nouvelle Angulaire version.<input type='number'>
, voir: stackoverflow.com/questions/21177489/...Voici un renforcement de la directive qui évite de réactiver le texte lorsque l'utilisateur clique sur pour placer le curseur dans la zone de saisie.
this
àelement[0]
et cela devrait fonctionner. J'ai aussi recommandé de changer declick
àfocus
afin que le texte sera sélectionné si l'utilisateur onglets dans l'entrée au lieu de cliquer sur elle.C'est une vieille réponse, Angulaire 1.x
Meilleure façon de le faire est par l'utilisation de la
ng-click
intégré dans la directive:EDIT:
Comme JoshMB a gentiment rappelé; référencement des nœuds DOM Angulaire 1.2+ n'est plus autorisée. Donc, j'ai déplacé
$event.target.select()
dans le contrôleur:Puis dans votre contrôleur:
Voici un exemple de violon.
ng-focus
permet à un utilisateur de sélectionner des sous-ensembles si ils veulent vraiment.Aucune des solutions proposées en ce qui a bien fonctionné pour moi. Après une rapide recherche j'ai trouvé ceci:
C'est un mélange de plusieurs des solutions proposées, mais fonctionne à la fois sur le clic et de se concentrer (pensez autofocus) et permet la sélection manuelle de la valeur partielle dans l'entrée.
focusedElement
?Pour moi, ng-cliquez sur n'ont pas de sens, parce que vous ne pourrait jamais repositionner le curseur sans sélectionner tout le texte encore une fois, je trouvais que c'était fastidieux. Ensuite, il est préférable d'utiliser ng-focus, parce que le texte est sélectionné uniquement si l'entrée n'a pas été porté, si vous cliquez à nouveau pour repositionner le curseur, puis le texte il suffit de désélectionner, comme prévu, et vous pouvez écrire entre les deux.
J'ai trouvé cette approche pour les UX de comportement.
Utilisation ng-focus
Option 1: séparer le code
et contrôleur de
Option 2: comme alternative, vous pouvez joindre le code ci-dessus dans ce "one-liner" (je n'ai pas tester, mais ça devrait fonctionner)
Accepté la réponse est à l'aide de l'événement click toutefois, si vous utilisez l'accent cas, seul le 1er clic déclenche l'événement et il a également déclenché lorsqu'une autre méthode est utilisée pour se concentrer sur l'entrée (comme le fait de frapper onglet ou en appelant à se concentrer dans le code).
Cela rend également nécessaire de vérifier si l'élément est déjà concentré comme Tamlyn réponse suggère.
this.select
.Angulaire 2, cela a fonctionné pour moi, à la fois dans Chrome & Firefox:
Pas de directives nécessaires, il suffit d'ajouter
onfocus="this.select()"
javascript natif à l'entrée de l'élément ou la zone de texte.Version modifiée qui a fonctionné pour moi.
Premier clic sélectionne le texte, cliquez à nouveau sur le même élément de désélectionner le texte
})