77 votes

Avec jQuery, comment mettre en majuscule la première lettre d'un champ de texte alors que l'utilisateur est encore en train de le modifier ?

Je cherche un exemple de la façon de mettre en majuscule la première lettre d'une chaîne de caractères saisie dans un champ de texte. Normalement, cela est fait sur l'ensemble du champ avec une fonction, regex, OnBlur , OnChange etc. Je veux mettre en majuscule la première lettre pendant que l'utilisateur est toujours typage.

Par exemple, si je tape le mot "chat", l'utilisateur doit appuyer sur "c", et lorsqu'il appuie sur "a", le C doit être en majuscule dans le champ.

Je pense que ce que je cherche pourrait être possible avec keyup ou keypress mais je ne sais pas par où commencer.

Quelqu'un a un exemple à me donner ?

104voto

Chris Lively Points 59564

Utilisez simplement les CSS.

.myclass 
{
    text-transform:capitalize;
}

36 votes

Cela mettra en majuscule TOUS les mots.

6 votes

@Kaleb La valeur 'capitalize' met en majuscule le premier caractère de chaque mot. w3schools.com/Css/pr_text_text-transform.asp

4 votes

Oui, c'est ce que je veux dire, le PO ne veut mettre en majuscule que le premier mot de tout le champ.

90voto

Zee Points 81

Cela transformera simplement la première lettre du texte :

yourtext.substr(0,1).toUpperCase()+yourtext.substr(1);

4 votes

Simple et doux. Il m'a aidé dans mon cas :)

6 votes

Cela devrait être la réponse acceptée, puisque cela modifie en fait l'entrée de l'utilisateur si vous l'utilisez comme entrée pour le backend.

0 votes

La réponse acceptée doit créer <tag> et ajouter .class ; celle-ci n'est pas nécessaire !

32voto

sakhunzai Points 2399

J'ai répondu à cette question quelque part ailleurs. Cependant, voici deux fonctions que vous pourriez vouloir appeler sur l'événement keyup.

Pour mettre la majuscule au premier mot

  function ucfirst(str,force){
          str=force ? str.toLowerCase() : str;
          return str.replace(/(\b)([a-zA-Z])/,
                   function(firstLetter){
                      return   firstLetter.toUpperCase();
                   });
     }

Et de mettre une majuscule à tous les mots

function ucwords(str,force){
  str=force ? str.toLowerCase() : str;  
  return str.replace(/(\b)([a-zA-Z])/g,
           function(firstLetter){
              return   firstLetter.toUpperCase();
           });
}

Comme l'a suggéré @Darrell

$('input[type="text"]').keyup(function(evt){

      // force: true to lower case all letter except first
      var cp_value= ucfirst($(this).val(),true) ;

      // to capitalize all words  
      //var cp_value= ucwords($(this).val(),true) ;

      $(this).val(cp_value );

   });

J'espère que cela vous aidera

Santé :)

2 votes

Cette fonction permet de capitaliser la lettre suivante à partir de caractères étrangers tels que le polonais, etc. "maopolska" = "MaOpolska"

0 votes

Il ne faut pas utiliser de regex sur les caractères ascii mais toujours mettre la première lettre en majuscule.

0 votes

La meilleure pratique serait d'utiliser .blur() car sinon les utilisateurs ne peuvent pas utiliser Ctrl + A pour tout sélectionner.

28voto

Darrell Brogdon Points 2266
$('input[type="text"]').keyup(function(evt){
    var txt = $(this).val();

    // Regex taken from php.js (http://phpjs.org/functions/ucwords:569)
    $(this).val(txt.replace(/^(.)|\s(.)/g, function($1){ return $1.toUpperCase( ); }));
});

0 votes

Pour info, ce script empêchera vos utilisateurs d'utiliser les touches de curseur dans la zone de texte.

27voto

Spajus Points 3296

La solution CSS avec "text-transform : capitalize ;" n'est pas bonne si vous voulez utiliser le contenu de l'entrée dans le backend. Vous recevrez toujours les données telles quelles. JavaScript résout ce problème.

Le plugin JQuery combine certaines des techniques mentionnées précédemment, et met en majuscule les mots après les traits d'union, par exemple : "Tro Lo-Lo" :

Ajoutez à votre script :

jQuery.fn.capitalize = function() {
    $(this[0]).keyup(function(event) {
        var box = event.target;
        var txt = $(this).val();
        var start = box.selectionStart;
        var end = box.selectionEnd;
        $(this).val(txt.replace(/^(.)|(\s|\-)(.)/g, function($1) {
            return $1.toUpperCase();
        }));
        box.setSelectionRange(start, end);
    });

   return this;
}

Il suffit ensuite d'attacher capitalize() à n'importe quel sélecteur :

$('#myform input').capitalize();

5 votes

Je pense que cela devrait être la réponse à cette question car la solution css n'est qu'une représentation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X