Passer un argument à une fonction
Résolu
emrh
Messages postés
439
Statut
Membre
-
emrh Messages postés 439 Statut Membre -
emrh Messages postés 439 Statut Membre -
Bonjour à tous,
J'ai écrit une fonction en JavaScript pour modifier à la perte du focus une valeur saisie dans un INPUT.
(Le but étant dans un premier temps de forcer un affichage avec 2 chiffres après la virgule. Ensuite,
j'aimerai bien formater le nombre dans l'INPUT avec un séparateur de milliers 1 234 567,89, mais chaque
chose en son temps !)
Le problème c'est que je ne sais pas comment faire pour que cette fonction puisse être efficace pour
d'autres INPUT.
Voici ce qui fonctionne déjà :
J'ai essayé un appel de ce type : onblur="formatage(prix); ou onblur="formatage('prix');
et ça dans la fonction :
Mais ça ne fonctionne pas...
Merci d'avance pour votre aide !
J'ai écrit une fonction en JavaScript pour modifier à la perte du focus une valeur saisie dans un INPUT.
(Le but étant dans un premier temps de forcer un affichage avec 2 chiffres après la virgule. Ensuite,
j'aimerai bien formater le nombre dans l'INPUT avec un séparateur de milliers 1 234 567,89, mais chaque
chose en son temps !)
Le problème c'est que je ne sais pas comment faire pour que cette fonction puisse être efficace pour
d'autres INPUT.
Voici ce qui fonctionne déjà :
<input class="input-formulaire prix-formulaire" maxlength="7" name="prix" id="prix" type="text" value="" onblur="formatage();" onkeypress="return chiffres(event);" autocomplete="off" />
function formatage(){ var euro = parseFloat(prix.value); if (!isNaN(euro)){ euro = euro.toFixed(2); document.getElementById("prix").value = euro; } }
J'ai essayé un appel de ce type : onblur="formatage(prix); ou onblur="formatage('prix');
et ça dans la fonction :
function formatage(arg) { var euro = parseFloat(arg); if (!isNaN(euro)){ euro = euro.toFixed(2); document.getElementById('arg').value = euro; } }
Mais ça ne fonctionne pas...
Merci d'avance pour votre aide !
A voir également:
- Passer un argument à une fonction
- Fonction si et - Guide
- Passer de qwerty a azerty - Guide
- Passer a windows 10 - Accueil - Mise à jour
- Passer de majuscule à minuscule - Guide
- Passer à windows 11 gratuitement - Guide
5 réponses
Salut,
non il n'y a pas d'équivalent du PHP, il faudra que vous le fassiez vous même.
vous devriez trouver toutes les réponses par là en ayant un peu d'imagination:
https://www.w3schools.com/jsref/jsref_obj_string.asp
Quand à la méthode .replace elle est utilisée avec une expression régulière(c'est le nom indépendamment du langage de programmation):
https://www.w3schools.com/jsref/jsref_obj_string.asp
où vous pouvez suivre le lien qui s'y trouve vers le tuto ou la référence de RegExp (Regular Expression en abrégé)
Il y a aussi .match mais autant les expressions régulières peuvent avoir leur intérêt autant je ne vois pas trop l'intérêt pour ce que vous voulez ici.
https://www.w3schools.com/jsref/jsref_match.asp
Moi je ferais à partir de votre résultat numérique:
obtenir la valeur entière dans une variable pour supprimer les décimales.
Tous les 3 caractères ajouter un espace en concaténant avec l'opérateur de concaténation '+' ce en ayant passer la valeur en chaîne de caractères à partir du nombre.
Soit vous utilisez la notation tabulaire (entre crochets) sur la chaîne de caractères(chaque caractère de la chaîne est accessible via un tableau: l'indice 0 étant le premier caractère, l'indice 1 le second etc...) ou encore mieux .substring ou .splice ou .split ou ce que vous voule zqui permet extraire/découper ou mettre en petits bouts une chaîne de caractères(voir les méthodes string su premier lien il n'y a pas qu'une façon de faire).
En PHP c'est le signe '.'(point) pour concaténer des chaînes de caractères (String) et en JavaScript c'est le signe '+'(plus) mais sinon c'est pareil pour la syntaxe.
https://tutowebdesign.com/la-concatenation-javascript.php
Puis concaténer les décimales restantes (en changeant le point par une virgule au passage) et s'il y a besoin d'arrondir vous avez Math.round et Math.floor pour tronquer une valeur décimale.
Bien sûr il y a d'autres façon de faire, c'est pour ça que je parlais d'imagination.
ps: il faudra une boucle et compter le nombre de caractères de la chaîne bien sûr. Vous apprendrez et comprendrez mieux si vous avez à chercher un peu quand même plus que suivre mes instructions^^
non il n'y a pas d'équivalent du PHP, il faudra que vous le fassiez vous même.
vous devriez trouver toutes les réponses par là en ayant un peu d'imagination:
https://www.w3schools.com/jsref/jsref_obj_string.asp
Quand à la méthode .replace elle est utilisée avec une expression régulière(c'est le nom indépendamment du langage de programmation):
https://www.w3schools.com/jsref/jsref_obj_string.asp
où vous pouvez suivre le lien qui s'y trouve vers le tuto ou la référence de RegExp (Regular Expression en abrégé)
Il y a aussi .match mais autant les expressions régulières peuvent avoir leur intérêt autant je ne vois pas trop l'intérêt pour ce que vous voulez ici.
https://www.w3schools.com/jsref/jsref_match.asp
Moi je ferais à partir de votre résultat numérique:
obtenir la valeur entière dans une variable pour supprimer les décimales.
Tous les 3 caractères ajouter un espace en concaténant avec l'opérateur de concaténation '+' ce en ayant passer la valeur en chaîne de caractères à partir du nombre.
var typeNumber=3.1415 var typeString=typeNumber+'' //--devient un objet String //-- ou équivalent en utilisant une méthode: var autreMethodePourPasserEnString = typeNumber.toString()
Soit vous utilisez la notation tabulaire (entre crochets) sur la chaîne de caractères(chaque caractère de la chaîne est accessible via un tableau: l'indice 0 étant le premier caractère, l'indice 1 le second etc...) ou encore mieux .substring ou .splice ou .split ou ce que vous voule zqui permet extraire/découper ou mettre en petits bouts une chaîne de caractères(voir les méthodes string su premier lien il n'y a pas qu'une façon de faire).
En PHP c'est le signe '.'(point) pour concaténer des chaînes de caractères (String) et en JavaScript c'est le signe '+'(plus) mais sinon c'est pareil pour la syntaxe.
https://tutowebdesign.com/la-concatenation-javascript.php
Puis concaténer les décimales restantes (en changeant le point par une virgule au passage) et s'il y a besoin d'arrondir vous avez Math.round et Math.floor pour tronquer une valeur décimale.
Bien sûr il y a d'autres façon de faire, c'est pour ça que je parlais d'imagination.
ps: il faudra une boucle et compter le nombre de caractères de la chaîne bien sûr. Vous apprendrez et comprendrez mieux si vous avez à chercher un peu quand même plus que suivre mes instructions^^
Bonjour,
Sans utiliser d'argument.. il suffit de te servir de la meme fonction que pour "mettre" le prix dans l'input..
Autrement dit ..
Avec Argument.. tu peux utiliser le mot clé this
et dans le js
Sans utiliser d'argument.. il suffit de te servir de la meme fonction que pour "mettre" le prix dans l'input..
document.getElementById("prix").value
Autrement dit ..
var euro = parseFloat(document.getElementById("prix").value);
Avec Argument.. tu peux utiliser le mot clé this
onblur="formatage(this);"*
et dans le js
function formatage(arg) { var euro = parseFloat(arg.value);
Je te remercie Jordan45 pour ton aide...
Je pense que je ne peux pas me passer de la syntaxe avec un argument car
comme je le précisais, j'ai besoin d'appeler cette fonction depuis 2 ou 3 INPUT
différents et renvoyer à celui qui a appelé le formatage de ce type : 123 456,78
Malheureusement, ta deuxième proposition ne fonctionne pas, si je saisie une
somme sans décimale ou avec une seule décimale, l'INPUT reste identique
quand il perd le focus...
Je pense que je ne peux pas me passer de la syntaxe avec un argument car
comme je le précisais, j'ai besoin d'appeler cette fonction depuis 2 ou 3 INPUT
différents et renvoyer à celui qui a appelé le formatage de ce type : 123 456,78
Malheureusement, ta deuxième proposition ne fonctionne pas, si je saisie une
somme sans décimale ou avec une seule décimale, l'INPUT reste identique
quand il perd le focus...
<input class="input-formulaire prix-formulaire" maxlength="7" name="prix" id="prix" type="text" value="" onblur="formatage(this);" onkeypress="return chiffres(event);" autocomplete="off" />
function formatage(arg) { var euro = parseFloat(arg.value); if (!isNaN(euro)){ euro = euro.toFixed(2); document.getElementById('arg').value = euro; } }
Ça fonctionne impec !
Je te remercie !!!
Sans abuser, puis-je te demander un petit plus ?
Je sais formater un nombre en php avec number_format($total, 2, ',', ' ');
pour avoir ce genre d'affichage : 123 456,78 (ou 123 456.78)
Mais si je veux faire la même chose en JavaScript comment dois-je écrire...
J'ai vu des trucs comme ça sur Internet :
n = n.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,');
Mais qu'est-ce que ça veut dire et comment l'adapter pour moi ?
ou ça :
const number = 123456.789;
console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number));
// expected output: "123.456,79 €"
(Mais sans l'€, en remplaçant le point par un espace et la virgule par un point)
Je te remercie !!!
Sans abuser, puis-je te demander un petit plus ?
Je sais formater un nombre en php avec number_format($total, 2, ',', ' ');
pour avoir ce genre d'affichage : 123 456,78 (ou 123 456.78)
Mais si je veux faire la même chose en JavaScript comment dois-je écrire...
J'ai vu des trucs comme ça sur Internet :
n = n.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,');
Mais qu'est-ce que ça veut dire et comment l'adapter pour moi ?
ou ça :
const number = 123456.789;
console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number));
// expected output: "123.456,79 €"
(Mais sans l'€, en remplaçant le point par un espace et la virgule par un point)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question