Qu'est-ce qu'une solution Vanilla JS ou jQuery qui sélectionne tout le contenu d'une zone de texte lorsque la zone de texte reçoit le focus?
javascript
jquery
user-interface
Jon Erickson
la source
la source
Réponses:
la source
la source
onmouseup="return false;"
si vous voulez que l'utilisateur puisse choisir librement et modifier le texte après mise au point dans la zone de texte. Avec ce code, le texte sera verrouillé dans une situation «sélectionner tout» et l'utilisateur ne pourra pas le modifier à moins que l'utilisateur ne tape un nouveau texte ou n'utilise les touches fléchées pour se déplacer. Honnêtement, cela ressemble à un comportement très étrange et n'aurait de sens que si la zone de texte est destinée à être définitivement non modifiable (et donc désactivée).onmouseup="return false;"
si vous voulez simplement la sélection se produire lorsque l'utilisateur premiers clics ou des tabulations. Et +1 pour le javascript vanille!la source
la source
mouseup
événement: "une fois que le curseur est dans le champ, cliquer quelque part dans le texte sélectionné pour y positionner le curseur ne fonctionne pas; les clics sont effectivement désactivés. des situations où la sélection de l'ensemble du texte sur le focus est souhaitable, c'est probablement le moindre de deux maux. "jQuery n'est pas JavaScript, ce qui est plus facile à utiliser dans certains cas.
Regardez cet exemple:
Source: Astuces CSS , MDN
la source
Ce n'est pas seulement un problème Chrome / Safari, j'ai rencontré un comportement assez similaire avec Firefox 18.0.1. La partie drôle est que cela ne se produit pas sur MSIE! Le problème ici est le premier événement de souris qui force à désélectionner le contenu d'entrée, donc ignorez simplement la première occurrence.
L'approche timeOut provoque un comportement étrange, et en bloquant chaque événement de souris, vous ne pouvez pas supprimer la sélection en cliquant à nouveau sur l'élément d'entrée.
la source
HTML:
Utilisation de JS:
Utilisation de JQuery:
Utilisation de React JS:
Dans le composant respectif à l'intérieur de la fonction de rendu -
la source
onFocus={(e) => e.target.select()}
ma solution est d'utiliser un timeout. Semble fonctionner correctement
la source
Cela fonctionnera également sur iOS:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/select
la source
Je sais que le code en ligne est un mauvais style, mais je ne voulais pas le mettre dans un fichier .js. Fonctionne sans jQuery!
la source
Les réponses ici m'ont aidé jusqu'à un certain point, mais j'ai eu un problème sur les champs de saisie Nombre HTML5 lorsque j'ai cliqué sur les boutons haut / bas dans Chrome.
Si vous cliquez sur l'un des boutons et que vous passez la souris sur le bouton, le nombre continue de changer comme si vous teniez le bouton de la souris parce que la souris était jetée.
J'ai résolu cela en supprimant le gestionnaire de souris dès qu'il avait été déclenché comme ci-dessous:
J'espère que cela aidera les gens à l'avenir ...
la source
mouseup
aux textes des champs de saisie et nenumber
s. Ce problème ne devrait donc pas se produireCela fonctionnera, essayez ceci -
Fonctionne dans Safari / IE 9 et Chrome, je n'ai cependant pas eu la chance de tester dans Firefox.
la source
Je sais qu'il y a déjà beaucoup de réponses ici - mais celle-ci manque jusqu'à présent; une solution qui fonctionne également avec le contenu généré par ajax:
la source
J'ai pu légèrement améliorer la réponse de Zach en incorporant quelques appels de fonction. Le problème avec cette réponse est qu'elle désactive complètement onMouseUp, vous empêchant ainsi de cliquer dans la zone de texte une fois qu'elle a le focus.
Voici mon code:
C'est une légère amélioration par rapport à la réponse de Zach. Il fonctionne parfaitement dans IE, ne fonctionne pas du tout dans Chrome et fonctionne avec succès alternatif dans FireFox (littéralement une fois sur deux). Si quelqu'un a une idée de la façon de le faire fonctionner de manière fiable dans FF ou Chrome, partagez-le.
Quoi qu'il en soit, j'ai pensé partager ce que je pouvais pour rendre cela un peu plus agréable.
la source
onMouseUp=""
etonMouseDown=""
ne sont pas la norme w3 correcte. Ils devraient êtreonmouseup=""
etonmousedown=""
. Comme pour les autres attributs html, ils doivent être écrits en minuscules et non en cas de chameau.Comme @Travis et @Mari, je voulais sélectionner automatiquement lorsque l'utilisateur cliquait dessus, ce qui signifie empêcher le comportement par défaut d'un
mouseup
événement, mais pas empêcher l'utilisateur de cliquer. La solution que j'ai trouvée, qui fonctionne dans IE11, Chrome 45, Opera 32 et Firefox 29 (ce sont les navigateurs que j'ai actuellement installés), est basée sur la séquence d'événements impliqués dans un clic de souris.Lorsque vous cliquez sur une entrée de texte qui n'a pas de focus, vous obtenez ces événements (entre autres):
mousedown
: En réponse à votre clic. La gestion par défaut augmentefocus
si nécessaire et définit le début de la sélection.focus
: Dans le cadre de la gestion par défaut demousedown
.mouseup
: L'achèvement de votre clic, dont la gestion par défaut mettra fin à la sélection.Lorsque vous cliquez sur une entrée de texte qui a déjà le focus, l'
focus
événement est ignoré. Comme @Travis et @Mari l'ont remarquablement remarqué, la gestion par défaut demouseup
doit être empêchée uniquement si l'focus
événement se produit. Cependant, comme il n'yfocus
a pas d'événement " ne s'est pas produit", nous devons en déduire ce que nous pouvons faire dans lemousedown
gestionnaire.La solution de @ Mari nécessite que jQuery soit importé, ce que je veux éviter. La solution de @ Travis le fait en inspectant
document.activeElement
. Je ne sais pas exactement pourquoi sa solution ne fonctionne pas sur tous les navigateurs, mais il existe un autre moyen de savoir si la saisie de texte a le focus: suivez simplement ses événementsfocus
et sesblur
événements.Voici le code qui me convient:
J'espère que cela aide quelqu'un. :-)
la source
la source
Il vous suffit d'ajouter l'attribut suivant:
Par exemple:
(Honnêtement, je n'ai aucune idée de pourquoi vous auriez besoin d'autre chose.)
la source
Cela a fonctionné pour moi (publication car ce n'est pas dans les réponses mais dans un commentaire)
la source
Edit: selon la demande de @ DavidG, je ne peux pas fournir de détails car je ne sais pas pourquoi cela fonctionne, mais je pense que cela a quelque chose à voir avec l'événement focus se propageant vers le haut ou vers le bas ou quoi que ce soit et l'élément d'entrée recevant la notification il a reçu l'attention. La définition du délai d'attente donne à l'élément un moment pour se rendre compte que c'est fait.
la source
Si vous enchaînez les événements ensemble, je pense que cela élimine le besoin d'utiliser
.one
comme suggéré ailleurs dans ce fil.Exemple:
la source
Remarque: Si vous programmez en ASP.NET, vous pouvez exécuter le script à l'aide de ScriptManager.RegisterStartupScript en C #:
Ou tapez simplement le script dans la page HTML suggérée dans les autres réponses.
la source
Je sème celui-ci quelque part, fonctionne parfaitement!
la source
Je suis un peu en retard à la fête, mais cela fonctionne parfaitement dans IE11, Chrome, Firefox, sans gâcher la souris (et sans JQuery).
la source
focus
en tabulant sur le terrain, vous trouverez plusieurs auditeurs d'événements mouseup attachés ...Ma solution est la suivante:
Donc, la souris fonctionnera généralement, mais ne désélectionnera pas après avoir obtenu le focus par entrée
la source