par
finipe » 07 févr. 2016, 23:45
Pour ceux que ça intéresse pour plus tard, j'ai finalement refait un script en partant de zéro, ne trouvant pas mon bonheur ailleurs.
Les conditions sont les suivantes :
- uniquement des chiffres ou un point (ou une virgule qui se transforme en point)
- pas plus d'une décimale après la virgule
- pas de point ou de virgule en premier caractère
Code : Tout sélectionner
function Calculatrice_Format(id)
{
var champ = document.getElementById(id);
var texte = champ.value;
var n = texte.length;
var i;
var car;
var point = 0;
var retour = "";
for(i=0 ; i<n ; i++)
{
car = texte.substring(i,i+1);
nb = parseInt(car);
// Point ou virgule
if(car == "," || car == ".")
{
// Pas de point en 1er caractère
if(i != 0 && point == 0)
{
retour += ".";
point = 1;
}
}
else if(Number.isInteger(nb) == true)
{
if(point < 2) retour += texte.substring(i,i+1);
// Si un point a déjà été mis, alors ce chiffre est une décimale
if(point == 1) point = 2;
}
}
// Renvoi de la valeur
champ.value = retour;
}
Voilà, a priori c'est efficace. J'ai peut-être réinventé la roue (la roue de trottinette, quoi...) mais ça fonctionne
Edit : je précise que la fonction est appelée sur onKeyUp, onMouseUp et onChange
Pour ceux que ça intéresse pour plus tard, j'ai finalement refait un script en partant de zéro, ne trouvant pas mon bonheur ailleurs.
Les conditions sont les suivantes :
[list][*] uniquement des chiffres ou un point (ou une virgule qui se transforme en point)
[*] pas plus d'une décimale après la virgule
[*] pas de point ou de virgule en premier caractère[/list]
[code]function Calculatrice_Format(id)
{
var champ = document.getElementById(id);
var texte = champ.value;
var n = texte.length;
var i;
var car;
var point = 0;
var retour = "";
for(i=0 ; i<n ; i++)
{
car = texte.substring(i,i+1);
nb = parseInt(car);
// Point ou virgule
if(car == "," || car == ".")
{
// Pas de point en 1er caractère
if(i != 0 && point == 0)
{
retour += ".";
point = 1;
}
}
else if(Number.isInteger(nb) == true)
{
if(point < 2) retour += texte.substring(i,i+1);
// Si un point a déjà été mis, alors ce chiffre est une décimale
if(point == 1) point = 2;
}
}
// Renvoi de la valeur
champ.value = retour;
}[/code]
Voilà, a priori c'est efficace. J'ai peut-être réinventé la roue (la roue de trottinette, quoi...) mais ça fonctionne :D
Edit : je précise que la fonction est appelée sur onKeyUp, onMouseUp et onChange