Changer dynamiquement un caractère dans un champ input

Par Lavoignat, il y a 9 ans


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

Kenor, il y a 9 ans

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.

Carouge10, il y a 9 ans

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>
Lavoignat, il y a 9 ans

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 :)

bahcmoa, il y a 9 ans

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>