Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1558 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JavaScript]Besoin d'aide sur ce script

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JavaScript]Besoin d'aide sur ce script

n°2149799
brutax
Posté le 18-07-2012 à 18:32:33  profilanswer
 

Bonjour à tous  :bounce:  
 
Voilà, je suis en train de faire un site php qui fait quelques calculs. J'ai besoin, pour des questions de lisibilité, d'ajouter des séparateurs de milliers.
J'ai donc trouvé un script sur le net (eh oui, un bon programmeur est un flemmard !) qui fait ça.
 
Tout bon, vraiment bien ce script ! Sauf que j'y comprends rien, javascipt n'étant absolument pas mon domaine et n'ayant pas vraiment le temps de m'y mettre pour approfondir les choses.
Mais à la limite, c'est pas grave, j'ai pas besoin de le comprendre vu qu'il marche !
 
Oui mais : Ce script ne gère pas les effacements (backspace et suppr). c'est à dire que si je veux modifier mon texte, faut que je ressaisisse l'URL.
 
voilà, donc si un As du JS aurait le temps de me trouver la solution, ça serait tout à son honneur.
 
Voici le code :
 

Citation :

<HTML>
 <head>
 
  <SCRIPT LANGUAGE="JavaScript">
 
   function currencyFormat(fld, milSep, decSep, e) {
 
    var sep = 0;
    var key = '';
    var i = j = 0;
    var len = len2 = 0;
    var strCheck = '0123456789';
    var aux = aux2 = '';
    var whichCode = (window.Event) ? e.which : e.keyCode;
 
    if (whichCode == 13) return true;  // Enter
 
    key = String.fromCharCode(whichCode);  // Get key value from key code
 
    if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
 
    len = fld.value.length;
 
    for(i = 0; i < len; i++)
 
    if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
 
    aux = '';
 
    for(; i < len; i++)
 
    if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
 
    aux += key;
 
    len = aux.length;
 
    if (len == 0) fld.value = '';
 
    if (len == 1) fld.value = '0'+ decSep + '0' + aux;
 
    if (len == 2) fld.value = '0'+ decSep + aux;
 
    if (len > 2) {
 
     aux2 = '';
 
     for (j = 0, i = len - 3; i >= 0; i--) {
 
      if (j == 3) {
       aux2 += milSep;
       j = 0;
      }
 
      aux2 += aux.charAt(i);
      j++;
 
     }
 
     fld.value = '';
 
     len2 = aux2.length;
 
     for (i = len2 - 1; i >= 0; i--)
 
     fld.value += aux2.charAt(i);
 
     fld.value += decSep + aux.substr(len - 2, len);
 
    }
 
   return false;
 
   }
 
   //  End -->
 
   </script>
 </head>
 <BODY>
 
  <form>
 
 Enter Value:  
 
 <input type=text name=test length=15 onKeyPress="return(currencyFormat(this,' ','.',event))">
 
 </form>
 
 </BODY>
</HTML>


 
Bon, bien entendu mon objectif est plus compliqué que ça, mais c'est pour simplifier.
 
Merci à tous. ;)

mood
Publicité
Posté le 18-07-2012 à 18:32:33  profilanswer
 

n°2149803
brutax
Posté le 18-07-2012 à 20:24:41  profilanswer
 

P.S. Si vous avez un autre script, je prends aussi ^^

n°2149936
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 19-07-2012 à 22:01:58  profilanswer
 
n°2150160
brutax
Posté le 20-07-2012 à 21:31:34  profilanswer
 

par ce que il faut que l'utilisateur voit ses milliers séparés pendant la saisie.
Je suis en train d'essayer de faire un autre script.
Je vous le passe. Le problème c'est de récupérer la position de son curseur après une insertion de chiffre n'importe où dans la chaîne. Je n'arrive pas non plus à gérer les backspace et suppr.
 
Le voilà, si quelqu'un a la bonté de m'aider.
 

Code :
  1. function millier()
  2.   {
  3.    var gauche;
  4.    var droite;
  5.    var pos;
  6.    var longueur;
  7.    var longueur2;
  8.    var valeur;
  9.    var start;
  10.    //récup de la position actuelle du curseur
  11.    start = document.getElementById('test').selectionStart;
  12.    var testpos=start;
  13.    //récup de la valeur du champ
  14.    valeur=document.getElementById("test" ).value;
  15.    //récupération de la longueur de la chaine
  16.    longueur=valeur.length;
  17.    //récupération de l'emplacement de la virgule
  18.    pos=valeur.indexOf(".", 0);
  19.    if(pos == -1)
  20.    {pos=longueur;}
  21.    //récupération de la partie entière
  22.    gauche = valeur.substring(0, pos);
  23.    gauche=supprEspace(gauche);
  24.    //nouvelle longueur de la chaine
  25.    longueur2=gauche.length;
  26.    //récupération de la décimale et la virgule
  27.    droite = valeur.substring(pos, longueur+1);
  28.    var gauche2=gauche;
  29.    for (var i=1;i<4;i++) {
  30.     if (parseInt(gauche2)>=Math.pow(10,(3*i))) {
  31.     gauche=gauche.substring(0,longueur2-(3*i))+" "+gauche.substring(longueur2-(3*i));
  32.     }
  33.    }
  34.    document.getElementById("test" ).value = gauche+""+droite;
  35.    //on remet le curseur où il doit être.
  36.    //on récup la nouvelle longueur de la chaine
  37.    new_longueur=gauche.length;
  38.    //si on a supprimé des chiffres (backspace)
  39.    if(new_longueur < longueur2 && longueur2 != 3)
  40.    {
  41.     start--;
  42.    }
  43.    //si on a ajouté des espaces avec les séparateurs de milliers
  44.    if(new_longueur > longueur2 && longueur2 != 3)
  45.    {
  46.     start++;
  47.     longueur2++;
  48.    }
  49.    if(new_longueur > longueur2 && longueur2 != 3)
  50.    {
  51.     start++;
  52.    }
  53.    document.getElementById('test').selectionStart = start;
  54.    document.getElementById('test').selectionEnd = start;
  55.    //si on a fait que se déplacer avec les flèches
  56.    if(new_longueur == longueur2)
  57.    {start += 1;}
  58.    document.getElementById("testspan" ).innerHTML = longueur2 +" - "+new_longueur+" - "+testpos+" - "+start;
  59.   }
  60.   function supprEspace(f)    {
  61.   var txtResultat="";
  62.   for (var i=0; i<=f.length-1; i++)    {
  63.    if (f.charAt(i)!=" " )    {
  64.     txtResultat+=f.charAt(i);
  65.    }
  66.   }
  67.   return txtResultat;
  68.  }

n°2150180
gatsu35
Blablaté par Harko
Posté le 20-07-2012 à 23:07:28  profilanswer
 

Il y a plus simple comme code pour formatter un nombre :)
SUr jsfiddle, j'ai un exemple un peu plus complet, http://jsfiddle.net/FpFHG/7/
Mais voici juste le code qui permet de formatter 1234567 en 1 234 567

Code :
  1. var number = "2324443";
  2. var formattedNumber = number.replace(/(\d)(?=(\d{3})+(?:[.,]\d{2})*$)/g, '$1 ');
  3. console.log(formattedNumber);


---------------
Blablaté par Harko
n°2150183
brutax
Posté le 21-07-2012 à 00:11:42  profilanswer
 

salut
merci pour ton code.
Et ça met le curseur où il faut ?
 
++

n°2150189
gatsu35
Blablaté par Harko
Posté le 21-07-2012 à 08:22:43  profilanswer
 

non si tu regarde bien, je n'ai quasiment aucune notion du curseur via ce code.
 
Il faut juste rajouter un algo qui gère le changement de longeur de la chaine entre la nouvelle chaine et la précédente chaine et qu'on regarde si on rajoute ou enleve un espace.
L'autre problème et de connaitre à quel endroit le rajout s'est opéré.
Mon code ici te formate le nombre d'une manière plus simple que les 40 lignes de codes que tu avais avant.


---------------
Blablaté par Harko
n°2150205
brutax
Posté le 21-07-2012 à 13:16:00  profilanswer
 

OK.
je te remercie Gatsu35

n°2150219
brutax
Posté le 21-07-2012 à 14:59:05  profilanswer
 

C'est bon, j'ai réussi à faire ce que je voulais.
J'y ai pas encore intégré ton script Gatsu, mais ça marche.
 
Le voilà pour ceux qui veulent
Notez que j'ai aussi une fonction qui remplace les virgules par des points avant traîtement du script.
 

Code :
  1. function millier()
  2.   {
  3.    var gauche;
  4.    var droite;
  5.    var pos;
  6.    var longueur;
  7.    var longueur2;
  8.    var valeur;
  9.    var start;
  10.    //récup de la position actuelle du curseur
  11.    start = document.getElementById('test').selectionStart;
  12.    //récup de la valeur du champ
  13.    valeur=document.getElementById("test" ).value;
  14.    //récupération de la longueur de la chaine
  15.    longueur=valeur.length;
  16.    //récupération de l'emplacement de la virgule
  17.    pos=valeur.indexOf(".", 0);
  18.    //s'il n'y a pas de virgule
  19.    if(pos == -1)
  20.    {pos=longueur;}
  21.    //récupération de la partie entière
  22.    gauche = valeur.substring(0, pos);
  23.    //on garde une variable qui contient la partie gauche AVEC les espaces
  24.    var gauche_esp=gauche;
  25.    //on supprime les espaces de gauche
  26.    gauche=supprEspace(gauche);
  27.    //nouvelle longueur de la chaine gauche (sans les espaces)
  28.    longueur2=gauche.length;
  29.    //récupération de la décimale et la virgule
  30.    droite = valeur.substring(pos, longueur+1);
  31.    //on rajoute les espaces    
  32.    var gauche2=gauche;
  33.    for (var i=1;i<4;i++) {
  34.     if (parseInt(gauche2)>=Math.pow(10,(3*i))) {
  35.     gauche=gauche.substring(0,longueur2-(3*i))+" "+gauche.substring(longueur2-(3*i));
  36.     }
  37.    }
  38.    //insertion de la valeur dans le champ
  39.    document.getElementById("test" ).value = gauche+""+droite;
  40.    //on remet le curseur où il doit être.
  41.    //nouvelle longueur de la chaine
  42.    longueur2=gauche_esp.length;
  43.    //on récup la nouvelle longueur de la chaine avec espaces
  44.    var new_longueur_esp=gauche.length;
  45.    // si on a ajouté des espaces avec les séparateurs de milliers, on incrémente la position du curseur
  46.    if(new_longueur_esp > longueur2 && longueur2 != 3)
  47.    {
  48.     start++;
  49.    }
  50.    // si on a supprimé des espaces en supprimant des chiffres, on décrémente la position du curseur
  51.    if(new_longueur_esp < longueur2 && longueur2 != 3)
  52.    {
  53.     start--;
  54.    }
  55.    //et on replace le curseur où il doit être    
  56.    document.getElementById('test').selectionStart = start;
  57.    document.getElementById('test').selectionEnd = start;
  58.   }
  59.   function supprEspace(f)    {
  60.   var txtResultat="";
  61.   for (var i=0; i<=f.length-1; i++)    {
  62.    if (f.charAt(i)!=" " )    {
  63.     txtResultat+=f.charAt(i);
  64.    }
  65.   }
  66.   return txtResultat;
  67.  }


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JavaScript]Besoin d'aide sur ce script

 

Sujets relatifs
[RESOLU] php script affichage fichier[VB.NET] Récupérer Form Active [Résolu]
Aide HTML / CSSModifier clé registre par script
Javascript - de l'intérêt de la compressionaide script .vbs "copier coller"
[PHP] - Aide sur codes PHP pour Club de Plongée ;)Script pour suppression auto fichier de log
Aide sur une fonction javascriptBesoin d 'aide pour combiner 2 script Javascript.
Plus de sujets relatifs à : [JavaScript]Besoin d'aide sur ce script


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR