J'ai une entrée 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 le ferais 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 la méthode Angular, mais la plupart des exemples que je trouve concernent une directive qui surveille une propriété modale pour un changement. Je suppose que j'ai besoin d'une directive qui surveille une entrée qui reçoit l'attention. Comment pourrais-je faire ça?
angularjs
angularjs-directive
Billy Coover
la source
la source
<input type="text" value="test" onclick="this.select()" />
?Réponses:
La façon de faire cela dans Angular est de créer une directive personnalisée qui effectue la sélection automatique pour vous.
Appliquez la directive comme ceci:
View demo
Update1 : Dépendance jQuery supprimée.
Update2 : Restreindre comme attribut.
Update3 : fonctionne dans Safari mobile. Permet de sélectionner une partie du texte (nécessite IE> 8).
la source
restrict: 'A'
), car cette directive vise à étendre le comportement d'un élément existant .selectOnLoad
directive link (). Mais dans link (), bien que scope soit déjà rempli, l'élément DOM n'est pas encore synchronisé avec $ scope, donc quand j'appelle select (), element est toujours vide et rien n'est sélectionné. La seule façon de contourner ce que j'ai trouvé est $ timeout, mais je pense que cela peut cesser de fonctionner avec une nouvelle version Angular.Voici une directive améliorée qui évite de resélectionner le texte lorsque l'utilisateur clique pour positionner le curseur dans la zone de saisie.
la source
this
enelement[0]
et cela devrait fonctionner. Je recommande également de changerclick
pourfocus
afin que le texte soit sélectionné si l'utilisateur tabule dans l'entrée au lieu de cliquer dessus.C'est une vieille réponse, pour Angular 1.x
La meilleure façon de le faire est d'utiliser la
ng-click
directive intégrée:ÉDITER:
Comme JoshMB l' a gentiment rappelé; le référencement des nœuds DOM dans Angular 1.2+ n'est plus autorisé. Donc, je suis passé
$event.target.select()
au contrôleur:Puis dans votre contrôleur:
Voici un exemple de violon .
la source
Aucune des solutions proposées n'a bien fonctionné pour moi. Après une recherche rapide, j'ai trouvé ceci:
C'est un mélange de plusieurs solutions proposées, mais fonctionne à la fois sur le clic et la mise au point (pensez à l'autofocus) et permet une sélection manuelle de la valeur partielle dans l'entrée.
la source
focusedElement
?Pour moi, ng-click n'avait pas de sens, car vous ne pouviez jamais repositionner le curseur sans sélectionner à nouveau tout le texte, j'ai trouvé que c'était ennuyeux. Ensuite, il est préférable d'utiliser ng-focus, car le texte n'est sélectionné que si l'entrée n'était pas focalisée, si vous cliquez à nouveau pour repositionner le curseur, le texte se désélectionne simplement, comme prévu, et vous pouvez écrire entre les deux.
J'ai trouvé que cette approche était le comportement UX attendu.
Utiliser ng-focus
Option 1: code séparé
et en contrôleur
Option 2: comme alternative, vous pouvez joindre le code ci-dessus dans ce "one-liner" (je n'ai pas testé cela mais cela devrait fonctionner)
la source
Dans angular 2, cela a fonctionné pour moi, à la fois dans Chrome et Firefox:
la source
La réponse acceptée utilise l'événement click, mais si vous utilisez l'événement focus, seul le premier clic déclenchera l'événement et il se déclenchera également lorsqu'une autre méthode est utilisée pour se concentrer sur l'entrée (comme appuyer sur l'onglet ou appeler le focus dans le code).
Cela rend également inutile de vérifier si l'élément est déjà focalisé comme le suggère la réponse de Tamlyn.
la source
this.select
.Aucune directive nécessaire, ajoutez simplement du
onfocus="this.select()"
javascript natif à l'élément d'entrée ou à la zone de texte.la source
Version modifiée qui a fonctionné pour moi. Le premier clic sélectionne le texte, le second clic sur le même élément désélectionne le texte
})
la source
Le moyen le plus simple de sélectionner tout le texte sur un clic, un focus ou une tabulation est !!!:
...
la source