Convertir en majuscules comme types d'utilisateur à l'aide de javascript
Je veux convertir en minuscules caractères majuscules que les types d'utilisateur à l'aide de javascript. Toutes les suggestions sont les bienvenues.
J'ai essayé ce qui suit:
$("#textbox").live('keypress', function (e) {
if (e.which >= 97 && e.which <= 122) {
var newKey = e.which - 32;
//I have tried setting those
e.keyCode = newKey;
e.charCode = newKey;
}
});
- Quels sont-ils taper dans? Si c'est une entrée ou un textarea, vous pouvez brancher dans le keydown
Vous devez vous connecter pour publier un commentaire.
Event.charCode
va déclencher une alerte en JS consoles. Cet avertissement étant:The 'charCode' property of a keyupevent should not be used. The value is meaningless.
je ne suis pas sûr de savoir pourquoi vous l'utilisez lorsque vous utilisez déjàEvent.which
etEvent.keyCode
.upper-case
au lieu deuppercase
. 🙂 +1 de moi que c'est une réponse intelligente mais n'est pas réellement modifier la valeur de la textbox.if (e.which >= 97 && e.which <= 122) {
.text-transform:uppercase
rend également le HTML 5placeholder
texte en majuscules dans votre boîte d'entrée (j'ai testé uniquement en Chrome 41). n'aime pas ça, alors je suis allé avec JavaScript solution à la place.Cela pourrait être une bonne solution. Juste mettre ceci dans votre CSS:
Si vous affichez les données à un serveur de script côté (disons php), vous pouvez toujours faire quelque chose comme ceci:
essayer ce script css, c'est le travail pour moi.
pour plus d'informations, ce que vous voyez, peut-être en majuscules, mais c'est en fait tout de même ce que vous tapez si vous tapez "Test", il est indiqué comme "TEST" mais quand votre obtenir par val (), il est indiqué comme "Test".
si vous voulez être en majuscules pour de vrai puis ajouter un peu de script ci-dessous sur des événements comme le flou de l'objet ou elenent que vous en avez besoin.
$(this).val($(this).val().toUpperCase());
Et si vous voulez utiliser pour objet spécifique ajoutent de script comme ce que j'ai utilisé maintenant
Edit:
Les plus façon la plus simple est par l'utilisation de css:
Depuis que vous avez marqués ce que jQuery question, ici, d'un simple (bien, assez simple) de jQuery solution:
À l'aide de touches empêche le "rebond" effet que keyup a (keydown le fait aussi, mais l'événement.qui ne fait pas la distinction directement entre les majuscules et les minuscules ici--changement de contrôle de clé est en désordre à cause de verrouillage des majuscules). Aussi, cela fonctionne sur le caractère d'entrée, le convertit en majuscule, puis l'ajoute à la valeur existante, plutôt que la première ajoutant, puis en convertissant le tout en majuscules comme la plupart des autres solutions que j'ai vu faire. Enfin, il convertit en fait le personnage plutôt que d'appliquer un style de mise en forme à ce que les CSS ne. Tout cela donne un meilleur contrôle, en particulier dans les situations où certains caractères doivent être forcé de majuscules et d'autres pas, comme dans les numéros de série ou autre.
EDIT: (quatre ans plus tard)!
Je n'ai jamais été heureux avec la façon dont jQuery/javascript poignées de modification des clés en majuscules comme ils sont saisis. J'ai été sur toutes les suggestions dans ce post, et aucun d'entre eux (moins de moi) tout à fait fonctionner parfaitement. C'est irritant pour moi, que c'était une simple question dans l'ancien VB6 jours pour changer le KeyAscii personnage qui a été adoptée à l'événement KeyPress. De toute façon, tout à fait par hasard, j'ai trouvé une sorte de "art noir" solution qui fonctionne parfaitement aussi loin que je l'ai testé. Le sens qu'il fonctionne dans Chrome, il gère correctement quelque soit la position du curseur sur le texte, c' (avec peu de travail) ne modifie pas le navigateur de mire du comportement, et de manière fiable les changements de majuscules, sans aucune sorte de nervosité montrant de minuscules premier. Alors que le CSS solution de tout cela, comme d'autres l'ont observé, il a l'inconvénient d'avoir par programmation de la force sous-jacents des caractères en majuscules lorsque vous avez besoin de la chaîne de travailler avec, ce qui peut être embêtant pour garder une trace de et, par conséquent, n'est pas à l'échelle. Alors, j'ai pensé que je pourrais écrire ça, au cas où quelqu'un le trouve utile.
Cette solution ne dépend Josh Bush peu (180 lignes de code, pour ceux qui s'inquiètent de la dépendance dilatation) Masked Entrée Plugin de digitalbush, qui est solide comme le roc et fait ce qu'il fait très bien. Si vous modifiez
event.which
à une autre valeur, et d'appeler lamask()
méthode par la suite (spécifier le gestionnaire de pression de touche de la première et de la deuxième masque dans votre code) le changement persiste.Voici un peu de code:
Masque ne prend pas en charge de très nombreux types de masques en natif: les littéraux, alpha, numérique et alphanumérique sont il. Si vous voulez des signes de ponctuation ou ce que vous avez à rouler votre propre en utilisant les regex. (Si vous faites cela, vous aurez besoin de garder à l'esprit que le même regex match est appliquée à chacun des caractères un à un, sans tenir compte des autres personnages, de sorte que vous ne pouvez pas faire quelque chose de compliqué). Dans mon cas particulier, j'ai besoin de tous les bouchons, plus les espaces et les virgules. Le
?
dans le masque chaîne signifie que les caractères suivants sont optionnels, ce qui me donne jusqu'à 20 caractères. Depuis je n'ai pas besoin d'un masque pour montrer, j'ai utilisé une chaîne vide pour un espace réservé.Que tout fonctionne parfaitement, sauf pour un petit problème: si vous voulez garder la manière dont le navigateur sélectionne le texte lors de la tabulation dans le domaine, vous devez faire un travail supplémentaire. J'ai fini par avoir à pirater le masque de code pour obtenir ce que je voulais.
J'ai d'abord essayé, il suffit de sélectionner le texte dans un foyer de gestionnaire d'événements, qui fonctionne normalement quand je l'appelle
focus()
à partir d'un keydown gestionnaire. Il n'a pas de travail ici; le curseur juste a obtenu à la fin du texte, comme il le ferait sur un clic de souris il. J'ai essayé de changer l'espace réservé à un espace. Cela a abouti à un rembourrage le texte avec assez de places pour remplir la limite spécifiée, et en sélectionnant l'ensemble de la chose.J'ai essayé quelques techniques ici, mais le meilleur d'entre eux (c'est à dire celle qui a effectivement travaillé dans ce cas) ne s'applique pas à la mettre en surbrillance jusqu'à la touche, ce qui signifie qu'il y a un décalage quand il arrive, et il n'arrive pas à tous, si vous maintenez la touche enfoncée jusqu'à ce qu'elle se répète et se laisser aller lorsque le focus est dans la boîte.
Alors j'ai creusé dans le masque de code. Comme il s'avère, le plugin a un accent gestionnaire d'événement qu'il utilise pour configurer le masque de l'indicateur (par exemple,
(___) ___-___-____
pour un téléphone) dans la boîte lorsque vous vous concentrez sur elle. C'est le comportement que vous voulez la plupart du temps, mais pas ici, car il remplace le texte sélectionné avec le texte sélectionné concaténé à la partie du masque indicateur qui n'a pas été rassasiée. Lorsque vous n'avez pas de masque indicateur, ce qui a pour effet de désactiver l'option le texte dans la case juste que se passerait-il si vous par programme affecté la valeur de texte de la boîte.J'ai décidé de pirater le masque de code un peu. J'ai d'abord essayé de commenter l'ensemble de l'accent gestionnaire d'événement, qui a eu pour effet de ne pas montrer le masque de saisie sur d'autres domaines où je le voulais. Donc, j'ai trouvé une alternative moins invasive. J'ai changé ce (actuellement jquery.maskedinput.js, la ligne 164):
à ceci:
Cela contourne la configuration du masque de l'indicateur si vous avez réglé votre espace réservé à une chaîne vide, ce qui permet au navigateur natif de l'accent comportement à prendre place.
Encore une chose: si vous utilisez le
focus()
méthode pour se concentrer sur la zone de texte (par exemple, pour le sauvetage de la saisie des données utilisateur à partir du navigateur tendance à errer à des pièces inconnues lors de l'utilisation de la touche tab), vous devrez appeler laselect()
méthode dans la mise au point de gestionnaire d'événement pour bien mettre en évidence le texte (keybdFocus
est un indicateur I lorsque j'appel lefocus()
événement à partir d'unkeydown
gestionnaire, de façon à distinguer, à partir d'une souris générés par la mise au point):Récapitulant les étapes:
mask()
méthode dans votre code. Le masque évalue e.pour déterminer si le candidat personnage s'adapte le masque, et apparemment, le gestionnaire et le masque de code sont placés dans l'ordre dans lequel ils sont indiqués.)''
lorsque vous appelez lamask()
méthode.select()
méthode dans votre attention du gestionnaire d'événement.Bien sûr, si vous voulez juste la force des caractères en majuscules dans le cadre typique d'une zone d'édition masquée, vous pouvez omettre les étapes 2 et 4. C'est comment je suis tombé dans cet en premier lieu.
Je sais je suis très en retard à la fête, mais je voudrais offrir ce:
Il a ces avantages:
JS Fiddle ici
C'est une solution, je suis venu avec, ce qui évite également les problèmes avec des espaces réservés de modification de majuscules, et ne plaisante pas avec la position du curseur.
Attention: ne modifie pas la "valeur" du champ, seulement l'affichage. Pour que le voir ici: La mise à jour d'une entrée de la valeur, sans perdre la position du curseur
Puis ajouter des données en majuscules attribut à l'élément HTML:
Travaillé dans Chrome, Firefox et IE9+.
Violon: https://jsfiddle.net/GarryPas/ptez7q0q/3/
Alors que le CSS + Côté Serveur UCase approche est sans doute "le meilleur", ici, est un Client à Côté de jQuery solution que j'utilise quand le besoin s'en fait sentir:
Elle n'est pas jolie, mais elle va se mettre au travail!
petite correction dans le script ci-dessus, cela fonctionne parfaitement maintenant.