Bonjour,

J'ai un champ prix et j'ai besoin de changer automatiquement une "virgule" en "point" si la personne tape une virgule. On m'a dit que l'on pouvais le faire avec une écouteur en jquery.

Sachant que j'ai un REGEX obligatoire qui demande de mettre 00.00, d'où ma question si quelqu'un met une virgule à la place du point.

Merci par avance pour vos réponses,

4 réponses


De tête, il me semble que c'est

$('input').on('keydown', function(e) {
    $(this).val($(this).val().replace(/,/g,'.'));
});

Un truc du genre, à tester/debugguer.

Bonjour,
Oui cela est possible et sans forcément passer en jquery.
En js simple, il est possible de faire cela avec la fonction "onkeyup"

Enter your number: <input type="text" id="fname" onkeyup="myFunction(this)">

<script>
function myFunction(srcObj) {
      if (srcObj.value.indexOf(",") != -1) {
        srcObj.value = (srcObj.value.split(",")[0] + "." + srcObj.value.split(",")[1]);
  }
}
</script>

Je vous remercie beaucoup pour vos réponses.
je m'excuse de n'avoir pas pu revenir plus tôt...

Le sujet à un peut changé :
Malgré que notre client nous a imposé un regex de type 00.00, il me dit que si on ne met pas de point, ni de virgule on se retrouve avec le message d'erreur du champ. Ce qui est normal vu la restriction demandé au départ. Du coup, je me demande : est-il possible de contraindre la personne à remplir le champ avec "01.00" si il ne tape que le "1" dans le champ ?

Est-ce que les exemples que vous m'avez donné pourrait m'aider par rapport à cette spécificité ?
Cela se rapproche-t-il des "masques" ?

Je vous remercie par avance pour vos réponses :)

salut lors du keyup je te conseille de filtrer uniquement les "non chiffre" et la transformation de la virgule en point ... pour ce qui est du fomatage (ajout de zéro et format prix avec 2 décimales) je te conseille de le faire à la validation du formulaire ou tout simplement lorsque le champs perd le focus (onblur) pour ne pas perturber l'utilisateur lors de sa saisie ;-)

<input type="text" id="price" onkeyup="only_number(this)" onblur="format_price(this)">

<script>
    function only_number(champsTexte){
        // remplace une virgule eventuelle en point
        champsTexte.value = champsTexte.value.replace(",",".") ;
        // empêche de taper (en fait, supprime du champs)  tout "non chiffre" et "non point" (ou virgule)
        champsTexte.value = champsTexte.value.replace(/[^\d\.]/,"") ;
        // limite à deux chiffres après la virgule
        champsTexte.value = champsTexte.value.replace(/(\.\d{2})./,"$1") ;
        // vire toute seconde virgule qui pourrait être tapée
        // vu qu'on n'accepte que 2 chiffres après la virgule, si y'a ".4." on vire le second point
        champsTexte.value = champsTexte.value.replace(/(\.\d)\./,"$1") ;
    }

    function format_price(champsTexte){
        // si y'a pas 2 décimales on les ajoute
        champsTexte.value = Number(champsTexte.value).toFixed(2) ;
        // si le prix est inférieur à 10, on ajoute un 0 devant
        if(champsTexte.value < 10){ 
            champsTexte.value = "0"+champsTexte.value ; 
        }
    }
</script>