Passer un argument à une fonction

Résolu/Fermé
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - 2 mars 2022 à 14:35
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - 4 mars 2022 à 19:34
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à :

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

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.
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^^
1
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
2 mars 2022 à 15:06
Bonjour,

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

0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
Modifié le 2 mars 2022 à 20:21
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...

<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;
    }
}
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
2 mars 2022 à 20:37
function formatage(arg) {

    var euro = parseFloat(arg.value); 
    if (!isNaN(euro)){
        euro = euro.toFixed(2);
        arg.value = euro;
    }
}
1
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
Modifié le 2 mars 2022 à 21:43
Ç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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
4 mars 2022 à 19:34
Merci beaucoup Ogga pour cette longue réponse très détaillée...
Je vais effectivement regarder du côté du découpage de chaîne, c'est une bonne idée !
0