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 :

JavaScript et la multiplication


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut JavaScript et la multiplication
    bonjour et merci pour votre coup d'oeil .
    j'ai essayé de faire la multiplication par des simple codes en JSP...voici le code:
    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
    18
    <html>
    <head>
    <script>
    function prod(){
    var i=document.getElementById("fr").value;
    var j=document.getElementById("sd").value;
    var k=i*j;
    document.getElementById("rst").innerHTML=k;
    }
    </script>
    </head>
    <body>
    <p>
    <input type="text" id="fr"/>x<input type="text" id="sd"/>=<input type="text" id="rst"/><br/>
    <input type="button" value="produit" onclick="prod()"/>
    [</p>
    </body>
    </html>
    quand j'exécute cette page...et après avoir appuyer sur le bouton produit...la zone réservée pour l'affichage le produit reste vide....donc il y a quelque chose qui ça va pas
    j'attend vos remarques....et merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Bonjour,

    Tout d'abord tu parles de JSP, mais il n'y en a pas dans ton code. Attention aux confusions.

    Ensuite, tes input sont de type text. Ce qui signifie que tu peux rentrer des lettres et pas seulement des chiffres. La valeur que tu récupères sera donc une string et pas un int. Tu peux soit utiliser la fonction parseInt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var i= parseInt(document.getElementById("fr").value);
    var j=parseInt(document.getElementById("sd").value);
    soit utiliser des <input type="number"> ; mais attention ce type n'est pas implémenté sur tous les navigateurs, donc par prudence mieux vaut rajouter le parseInt

    Par ailleurs pour la suite, je t'invite à essayer la console d'erreurs Javascript (celle de chrome accessible par F12 est très bien) pour t'aider à débugger.

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("rst").innerHTML=k;
    Un input étant une balise autofermante, elle ne possède pas de innerHTML...

    @SylvainPV : si les valeurs des deux input est numérique, la multiplication effectuera elle-même le transtypage. Il n'y a que pour l'addition que ce n'est pas le cas car + est aussi l'opérateur de concaténation.

  4. #4
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var i=document.getElementById("fr").value * 1;
    var j=document.getElementById("sd").value * 1;
    var k=i*j;

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 110
    Points : 44 908
    Points
    44 908
    Par défaut
    Bonjour,
    Citation Envoyé par pc75
    Et comme ça ?
    relis bien la réponse de Bovino, cela n'est pas utile.

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Aucune utilité !
    Il suffit juste d'affecter le résultat à value au lieu de innerHTML

  7. #7
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Waaaarg

    je suis un indécrotable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try {
      var i=parseInt(document.getElementById("fr").value, 10);
      var j=parseInt(document.getElementById("sd").value, 10);
      var k=i*j;
    } catch (err) {
       alert('les informations fournies ne sont pas de nombres: ' + err);
    }
    A+JYT

  8. #8
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par Bovino Voir le message
    @SylvainPV : si les valeurs des deux input est numérique, la multiplication effectuera elle-même le transtypage. Il n'y a que pour l'addition que ce n'est pas le cas car + est aussi l'opérateur de concaténation.
    Ah, tu viens de m'apprendre un truc ! Donc "2"*"3" === 6
    C'est fascinant mais je trouve quand même ça très moche

  9. #9
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    bonjour,

    outre la remarque de Bovino sur les produits en javascript :
    Citation Envoyé par SylvainPV Voir le message
    donc par prudence mieux vaut rajouter le parseInt
    Citation Envoyé par sekaijin Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      var i=parseInt(document.getElementById("fr").value, 10);
      var j=parseInt(document.getElementById("sd").value, 10);
      var k=i*j;
    pourquoi parseInt() ? on ne peut pas faire de multiplication avec des flottants ?

  10. #10
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par Auteur Voir le message
    pourquoi parseInt() ? on ne peut pas faire de multiplication avec des flottants ?
    si bien sûr. parseFloat pour les décimaux

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Bon, ben pour les "indécrottables", l'opérateur de transtypage, c'est +, pas parseInt() ni parseFloat()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log(typeof +"6");

  12. #12
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Oui effectivement
    parseInt et parseFloat ne sont pas des opérateur de transtypage

    mais pour une saisie soit on transtype est donc cela nessecite une saisie stricte
    soit on parse et on accept des petite chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    parseInt("10");
    parseInt("10.33") ;
    parseInt("34 45 66");
    parseInt(" 60 ";
    parseInt("40 years";
    parseInt("He was 40";
     
    parseInt("10",10);
    parseInt("010");
    parseInt("10",8);
    parseInt("0x10");
    parseInt("10",16);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    10
    10
    34
    60
    40
    NaN
    10
    8
    8
    16
    16
    alors que certaine de ces valeurs vont généré une erreur avec un transtypage
    A+JYT

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    En même temps, tu n'avais pas parlé de transtypage toi !
    Je voulais juste chipoter, mais comme toujours, tes commentaires sont précis et judicieux !

  14. #14
    Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut merci beaucoup pour vos interventions
    merci à : SylvainPV,Bovino,pc75,NoSmoking,sekaijin etAuteur pour vos bonnes interventions et pour vos explications.
    le problème est bien résolu en se basant sur vos analyses....le code final est comme suit :
    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
    18
    <html>
    <head>
    <script>
    function prod(){
    var i=parseFloat(document.getElementById("fr").value);
    var j=parseFloat(document.getElementById("sd").value);
    var k=i*j;
    document.getElementById("rst").value=k;
    }
    </script>
    </head>
    <body>
    <p>
    <input type="text" id="fr"/>x<input type="text" id="sd"/>=<input type="text" id="rst"/><br/>
    <input type="button" value="produit" onclick="prod()"/>
    </p>
    </body>
    </html>
    et après l’exécution, le résultat était parfait.
    encore merci beaucoup pour votre collaboration.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2007, 15h55
  2. [Javascript] Alert select multiple.
    Par zulot dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/01/2007, 18h51
  3. Multiplication en javascript
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 14/02/2005, 11h55
  4. Multiplication en javascript ? et Formatage
    Par Yaz dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/11/2004, 10h40

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