IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Remplacer un caractère à la volée


Sujet :

JavaScript

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Remplacer un caractère à la volée
    Bonjour à tous,

    En parcourant le site je suis tombé sur ce petit code tout bête Remplacer un caractère à la volée et il me plait beaucoup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function virgule(texte) {
        if (texte.substr(texte.length-1,1) == ",") {
            document.getElementById('champ').value=texte.substr(0,texte.length-1)+ "." ;
        }
    }
    Je l'ai intégré à mon projet sans soucis sur une page pour faire des tests et tout fonctionne parfaitement. Par contre je rencontre une difficulté dans un certain cas de figure.

    Comme on utilise getElementById() le script plante quand je me retrouve avec plusieurs input à vérifier sur la même page.

    Existe t'il une méthode pour palier à ce problème ? J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function noVirgule(texte) {
        if (texte.substr(texte.length-1,1) == ",") {
            document.getElementById('effVirgule1' || 'effVirgule2' || 'effVirgule3').value=texte.substr(0,texte.length-1)+ "." ;
        }
    }
    Mais ça ne marche pas. (Inutile de me dire que je suis une quiche en Js et/ou Ajax : je le sais! )

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <script type="text/javascript">
    function noVirgule(texte) {
        if (/,/.test(texte)) {
         var i=0;
         while(obj=document.getElementById('effVirgule'+ ++i)){ 
    			obj.value=texte.replace(/,/g,'.')
    			}
        }
    } 
    </script>
    </head>
     
    <body onload="noVirgule('boujour, ce, texte est, plein de virgules, mais sera plein de points')">
    <input type='text' id="effVirgule1" value="" />
    <input type='text' id="effVirgule2" value="" />
    <input type='text' id="effVirgule3" value="" />
    </body>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Par les milles craquettes en folie je vous remercie SpaceFrog !

    Mais je vais quand même tester ce code avant de sabrer le champagne, parce que je ne sais pas à quoi sert le 'body onload'. Donc j'essaie de l'intégrer à mes pages et si ça fonctionne je paie ma tournée.

    Je vous donne des nouvelles sur le résultat des test.

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Tout d'abord je tiens à m'excuser pour le délai plus que long qui sépare mon premier message de cette réponse, mais je n'ai pas eu le temps (l'envie?) de m'y atteler plus tôt.

    Ceci étant dit, après quelques tests du code de SpaceFrog voici la situation:

    J'ai 3 input text prévus pour que l'utilisateur y inscrive des prix qui seront ajoutés à la base de données. La fonction noVirgule est une sécurité qui doit permettre de remplacer les virgules par des points lors de la saisie des données. (dans le but d'avoir une double sécurité: coté client avec javascript et coté serveur avec php ou sql).

    J'ai transposé le code de SpaceFrog comme ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Change le caractere ',' par le caractere '.'
    function noVirgule(texte) {
        if (/,/.test(texte)) {
         var i=0;
         while(obj=document.getElementById('effVirgule'+ ++i)){ 
                obj.value=texte.replace(/,/g,'.')
                }
        }
    } 
    // a inserer : <input type="text" id="effVirgule" onkeyup="noVirgule(this.value);">
    Dans mon fichier scripts.js

    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo("<td><input type=\"text\" name=\"PrixPdVins1\" id=\"effVirgule1\" value=\"".htmlentities($donGv['PRIX_TTC_1'])."\" onkeyup=\"noVirgule(this.value);\" />&nbsp;&euro;</td>");
    echo("<td><input type=\"text\" name=\"PrixPdVins2\" id=\"effVirgule2\" value=\"".htmlentities($donGv['PRIX_TTC_2'])."\" onkeyup=\"noVirgule(this.value);\" />&nbsp;&euro;</td>");
    echo("<td><input type=\"text\" name=\"PrixPdVins3\" id=\"effVirgule3\" value=\"".htmlentities($donGv['PRIX_TTC_3'])."\" onkeyup=\"noVirgule(this.value);\" />&nbsp;&euro;</td>");
    Dans mon fichier prix.php

    Malheureusement avec ce code si une virgule est saisie dans un des trois input cela converti automatiquement les valeurs des deux autres. Par exemple:
    PRIX1 [12.50] | PRIX2 [23.40] | PRIX3 [54,80] devient aussitôt PRIX1 [54.] | PRIX2 [54.] | PRIX3 [54.00]

    J'obtenais exactement le même résultat avec le premier code que j'ai testé dans mon premier message. Cela n'a rien changé.

    Voyez une solution à ce problème?

    Merci à vous.

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    ???
    Ben c'est pas le but recherché de remplacer les virgules par de points ???
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Si biensûr

    Mais comme je l'indique ici:
    Malheureusement avec ce code si une virgule est saisie dans un des trois input cela converti automatiquement les valeurs des deux autres. Par exemple:
    PRIX1 [12.50] | PRIX2 [23.40] | PRIX3 [54,80] devient aussitôt PRIX1 [54.] | PRIX2 [54.] | PRIX3 [54.80]
    Cette fonction ne se limite pas à changer les virgules en point sur l'input incorrect elle modifie les valeurs entières (pas seulement les virgules) de tous les input.

    Si on regarde l'exemple indiqué les PRIX1 et PRIX2 qui étaient correctes sont modifiés aussi (PRIX1 [12.50] --> PRIX1 [54.] // PRIX2 [23.40] --> PRIX2 [54.]) Donc les prix ont changé, pas seulement "la ponctuation".

    En quelque sorte la fonction ne fait pas la différence entre chaque input elle les traite tous comme si il n'y en avait qu'un.

    Voyez vous la différence et le soucis que ça pose dans la saisie des données?

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Ha tu veux dire input par input ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script type="text/javascript">
    function noVirgule(obj) {
                obj.value=obj.value.replace(/,/g,'.')
            } 
    </script>
    </head>
     
    <body>
    <input type="text" name="PrixPdVins1" id="effVirgule1" value="" onkeyup="noVirgule(this);" />&nbsp;&euro; <br/>
    <input type="text" name="PrixPdVins2" id="effVirgule2" value="" onkeyup="noVirgule(this);" />&nbsp;&euro;<br/>
    <input type="text" name="PrixPdVins3" id="effVirgule3" value=""onkeyup="noVirgule(this);" />&nbsp;&euro;<br/>
    </body>
    j'étais parti sur une verification globale de tous les inputs...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Je viens de tester, maintenant ça marche parfaitement, milles mercis!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TinyMCE] [Wordpress] Remplacement de caractères à la volée
    Par darkvadd7 dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 21/01/2014, 11h09
  2. Remplacer un caractère saisi, a la volée en JS ?
    Par fc_pim dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/09/2007, 09h52
  3. [CR] Chercher et remplacer un caractère dans 1 chaine
    Par franck.cvitrans dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 29/09/2004, 16h42
  4. Fonction permettant de remplacer des caractères
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 06/09/2004, 15h48
  5. Remplacer un caractère
    Par Mvu dans le forum ASP
    Réponses: 5
    Dernier message: 20/07/2004, 09h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo