Comment définir automatiquement la zone de texte en majuscules?

131

J'utilise l'attribut de style suivant pour définir l'entrée utilisateur en majuscules de sorte que lorsque l'utilisateur commence à taper dans la zone de texte par exemple railway, il doit être modifié en majuscules comme RAILWAY sans que l'utilisateur n'ait à appuyer sur le bouton de verrouillage des majuscules .

Voici le code que j'utilise pour l'entrée:

<input type = "text" class = "normal" name = "Name" size = "20" maxlength = "20"> <img src="../images/tickmark.gif" border="0" style='text-transform:uppercase'/>

Mais je n'obtiens pas le résultat souhaité en utilisant cet attribut.

ybc126
la source
2
Comme mentionné ci-dessous, faites attention à avoir des espaces entre = et les valeurs "texte"
Jonathan Safa

Réponses:

261

Vous avez mis l' styleattribut sur la <img>balise, au lieu du <input>.

Ce n'est pas non plus une bonne idée d'avoir les espaces entre le nom de l'attribut et la valeur ...

<input type="text" class="normal" 
       name="Name" size="20" maxlength="20" 
       style="text-transform:uppercase" /> 
<img src="../images/tickmark.gif" border="0" />

Veuillez noter que cette transformation est purement visuelle et ne modifie pas le texte envoyé dans POST.

freefaller
la source
67
Notez que si vous envoyez ces données via un POST, il les enverra comme vous l'avez tapé, pas comme il est affiché à l'écran.
Vincent Poirier
@freefaller, il a changé toutes les entrées en majuscules mais l'insertion dans mysql est du texte en minuscules, comment changer la majuscule!
David Jaw Hpan
6
@David, voir le commentaire précédent. La transformation est purement visuelle. Cela ne change pas la casse du texte sous-jacent qui est renvoyé au serveur. Si vous souhaitez enregistrer le texte en majuscules, vous devez le transformer sur le serveur avant de l'enregistrer
freefaller
7
Ce n'est pas une solution complète, car l'espace réservé est maintenant en majuscules (ce qui dans la plupart des cas ne devrait pas l'être). Il n'y a pas d'autre moyen que d'utiliser JavaScript.
tomericco
1
Les futurs lecteurs qui souhaitent que les changements soient apportés sur la valeur au lieu d'être purement visuels, voir la réponse de Burak Tokak .
Dinei
59

Je pense que la solution la plus robuste qui garantira qu'il est affiché en majuscules est d'utiliser la méthode oninput en ligne comme:

<input oninput="this.value = this.value.toUpperCase()" />

ÉDITER

Certaines personnes se sont plaints du fait que le curseur saute à la fin lors de la modification de la valeur, donc cette version légèrement étendue devrait résoudre ce problème.

<input oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" />

Yehuda Schwartz
la source
36

Les réponses avec le text-transformation:uppercasestyle n'enverront pas de données en majuscules au serveur lors de la soumission - ce à quoi vous pouvez vous attendre. Vous pouvez faire quelque chose comme ça à la place:

Pour votre entrée HTML, utilisez onkeydown:

<input name="yourInput" onkeydown="upperCaseF(this)"/>

Dans votre JavaScript:

function upperCaseF(a){
    setTimeout(function(){
        a.value = a.value.toUpperCase();
    }, 1);
}

Avec la upperCaseF()fonction à chaque pression de touche vers le bas, la valeur de l'entrée va se transformer en sa forme majuscule.

J'ai également ajouté un délai de 1 ms pour que le bloc de code de fonction se déclenche après l'événement keydown.

Burak Tokak
la source
4
On pourrait utiliser l' inputévénement au lieu de keydownet se débarrasser de la setTimeoutsolution de contournement.
Dinei
1
Cela fonctionne, mais comment éviter le vilain saut entre minuscules et majuscules?
Jonathan Safa
7
Pour aller avec l'idée "événement d'entrée", l'ajout de cet attribut à l' inputélément semble bien fonctionner:oninput="this.value = this.value.toUpperCase()"
Tommy Stanton
3
@JonathanSafa Utilisez ceci en plus de la text-transform:uppercasesolution de style css ci-dessus pour que l'entrée apparaisse toujours en majuscules
miknik
1
Lorsqu'un utilisateur modifie le texte existant et place le curseur ailleurs qu'à la fin, le curseur saute à la fin avec chaque caractère saisi. Existe-t-il un moyen de conserver la position du curseur et de transformer le texte en majuscules?
Mike Wodarczyk
17

Le problème avec la première réponse est que l'espace réservé sera également en majuscules. Dans le cas où vous souhaitez SEULEMENT l'entrée en majuscules, utilisez la solution suivante.

Afin de sélectionner uniquement l'élément d'entrée non vide, placez l'attribut requis sur l'élément:

<input type="text" id="name-input" placeholder="Enter symbol" required="required" />

Maintenant, pour le sélectionner, utilisez le :validpseudo-élément:

#name-input:valid { text-transform: uppercase; }

De cette façon, vous ne mettrez en majuscules que les caractères saisis.

Tomericco
la source
4
Cette réponse ne fonctionne pas et n'a pas de sens non plus. Pourquoi une sélection uniquement si l'entrée est valide affecterait-elle le texte d'entrée et non l'espace réservé? Je suppose que si le blanc n'était pas une valeur valide, cela pourrait fonctionner par hasard. J'ai utilisé la réponse ici: stackoverflow.com/questions/25180140/…
Ben Thurley
6
Ma solution fonctionne parfaitement uniquement pour les champs de saisie de texte obligatoires. Si vous essayez de le généraliser, cela ne fonctionnera pas. Il répond à la question ci-dessus. Vous posez probablement une question différente.
tomericco
C'est une solution vraiment utile, et c'est exactement ce dont j'avais besoin. Cela ne conviendra pas à toutes les situations car cela dépend du champ requis, mais c'est certainement pratique à avoir dans la boîte à outils!
Tim Mackey
9

essayer

<input type="text" class="normal" 
       style="text-transform:uppercase" 
       name="Name" size="20" maxlength="20"> 
 <img src="../images/tickmark.gif" border="0"/>

Au lieu de l'image, mettez une balise de style en entrée car vous écrivez sur l'entrée et non sur l'image

Daniel Marín
la source
4
Cependant, cela rend également le texte de l'espace réservé en majuscule.
Kazim Zaidi le
5

Définir le style suivant pour définir toute la zone de texte en majuscules

input {text-transform: uppercase;}
Mukund
la source
3

Le problème avec le style CSS est qu'il ne change pas les données, et si vous ne voulez pas avoir de fonction JS, essayez ...

<input onkeyup="this.value = this.value.toUpperCase()" />

seul, vous verrez le champ capitaliser sur keyup, il peut donc être souhaitable de le combiner avec les style='text-transform:uppercase'autres suggérés.

user3094755
la source
2

L'utilisation de CSS text-transform: uppercasene change pas l'entrée réelle mais change seulement son apparence. Si vous envoyez les données d'entrée à un serveur, elles seront toujours en minuscules ou quelle que soit la manière dont vous les avez entrées. Pour réellement transformer la valeur d'entrée, vous devez ajouter du code javascript comme ci-dessous:

document.querySelector("input").addEventListener("input", function(event) {
  event.target.value = event.target.value.toLocaleUpperCase()
})
<input>

Ici, j'utilise toLocaleUpperCase()pour convertirinput valeur en majuscules. Cela fonctionne bien jusqu'à ce que vous ayez besoin de modifier ce que vous avez entré, par exemple si vous avez entré ABCXYZ et que vous essayez maintenant de le changer en ABCLMNXYZ, il deviendra ABCLXYZMN car après chaque entrée, le curseur saute à la fin.

Pour surmonter ce saut du curseur, nous devons apporter les modifications suivantes à notre fonction:

document.querySelector("input").addEventListener("input", function(event) {
  var input = event.target;
  var start = input.selectionStart;
  var end = input.selectionEnd;
  input.value = input.value.toLocaleUpperCase();
  input.setSelectionRange(start, end);
})
<input>

Maintenant, tout fonctionne comme prévu, mais si vous avez un PC lent, vous pouvez voir le texte passer des minuscules aux majuscules au fur et à mesure que vous tapez. Si cela vous ennuie, c'est le moment d'utiliser CSS, appliquez input: {text-transform: uppercase;}au fichier CSS et tout ira bien.

Gangwar Gaurish
la source
1

Cela affichera à la fois l'entrée en majuscules et enverra les données d'entrée par courrier en majuscules.

HTML

<input type="text" id="someInput">

JavaScript

var someInput = document.querySelector('#someInput');
someInput.addEventListener('input', function () {
    someInput.value = someInput.value.toUpperCase();
});
Shateel Ahmed
la source
0

Comme personne ne l'a suggéré:

Si vous souhaitez utiliser la solution CSS avec des espaces réservés en minuscules, il vous suffit de styliser les espaces réservés séparément. Divisez les 2 styles d'espace réservé pour la compatibilité avec IE.

input {
    text-transform: uppercase;
}
input:-ms-input-placeholder {
    text-transform: none;
}
input::placeholder {
    text-transform: none;
}
The below input has lowercase characters, but all typed characters are CSS-uppercased :<br/>
<input type="text" placeholder="ex : ABC" />

LePatay
la source
0

Essayez la solution ci-dessous, cela prendra également soin lorsqu'un utilisateur n'entre que des espaces vides dans le champ de saisie au premier index.

document.getElementById('capitalizeInput').addEventListener("keyup",   () => {
  var inputValue = document.getElementById('capitalizeInput')['value']; 
  if (inputValue[0] === ' ') {
      inputValue = '';
    } else if (inputValue) {
      inputValue = inputValue[0].toUpperCase() + inputValue.slice(1);
    }
document.getElementById('capitalizeInput')['value'] = inputValue;
});
<input type="text" id="capitalizeInput" autocomplete="off" />

Hardik Shimpi
la source
-2
<script type="text/javascript">
    function upperCaseF(a){
    setTimeout(function(){
        a.value = a.value.toUpperCase();
    }, 1);
}
</script>

<input type="text" required="" name="partno" class="form-control" placeholder="Enter a Part No*" onkeydown="upperCaseF(this)">
SOUDHAKAR ARUNACHALAM
la source
4
Comment cette réponse se distingue-t-elle de toutes celles déjà données?
Capricorne