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 :

Faire la somme de 2 inputs type number


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2019
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2019
    Messages : 125
    Points : 70
    Points
    70
    Par défaut Faire la somme de 2 inputs type number
    Bonsoir à tous,
    j'ai un petit problème auquel je ne trouve pas d'explication.

    Je veux additionner deux inputs de type "number" et mettre le résultat dans une un troisième input de type "number" aussi.

    J'ai écrit: document.getElementById('input3').value = document.getElementById('input1').value + document.getElementById('input2').value;.

    le résultat que je reçoit n'est pas une addition mais juste une concaténation des valeurs des deux inputs (valeur1Valeur2); c'est à dire que si la valeur de input1 est: 5 et la valeur de Input2 est: 8 alors le résultat est 58 (5 collé à 8), au lieu de 13 (5 + 8).

    Pourtant les 3 inputs sont de type "number" et non pas de type "text".

    Ce qui est étonnant, avec une multiplication, ça marche bien: si je fait document.getElementById('input3').value = document.getElementById('input1').value * document.getElementById('input2').value;, je reçoit bien 40 dans Input3

    Quelqu'un aurait une explication, svp ?

    MERCI

  2. #2
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 176
    Points
    17 176
    Par défaut
    Salut

    Essaies comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //document.getElementById('input3').value = document.getElementById('input1').value + document.getElementById('input2').value;
    //en modifiant de cette façon
    document.getElementById('input3').value = Number(document.getElementById('input1').value) + Number(document.getElementById('input2').value);
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Il faut utiliser parseInt ou parseFloat si tu veux faire ça correctement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.getElementById('3').value = parseFloat(document.getElementById('2').value) +parseFloat( document.getElementById('1').value);
    et utilise des inputs de type number...

    L'attribut value contient une chaîne de caractères (DOMString) qui correspond à la valeur contenue dans le champ texte...
    Alors pourquoi ça marche sur un produit, je n'en sais rien...

  4. #4
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2019
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2019
    Messages : 125
    Points : 70
    Points
    70
    Par défaut
    Merci Archimede,
    Tu as raison, c'est ce qu'il fallait faire (ParseFloat). J'avais essayé avec ParseInt mais cela n'avait pas marché.
    Merci ProgElect aussi.

    Bonne continuation à tous

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    une explication est donnée dans la
    Pourquoi mes deux valeurs se concatènent au lieu de s'additionner ?.

    Il existe également, depuis la prise en compte du HTML5, et donc l'arrivée des <input type="number"> un attribut valueAsNumber qui rend plus simple la récupération
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Utilisation de : valueAsNumber attribute
    // The valueAsNumber IDL attribute represents the value of the element, interpreted as a number.
    // Il existe un petit correctif pour IE https://gist.github.com/jonathansampson/c9071cc90e0014f4859f
    function calculSomme(){
      const somme = elemVal1.valueAsNumber + elemVal2.valueAsNumber;
      elemResult.textContent = somme;
    }
    Une méthode de récupération de plus qui me semble être plus logique attendu de la spécificité de ce type d'<input>.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/03/2017, 08h04
  2. Webview windows input type number keyboard problem
    Par jameson dans le forum Windows Phone
    Réponses: 2
    Dernier message: 05/08/2015, 13h10
  3. masquer/supprimer les boutons d'un input type number
    Par LeGilou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 01/08/2013, 15h42
  4. input type number IE 10
    Par Xeuch dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 26/06/2013, 17h59
  5. Réponses: 2
    Dernier message: 15/05/2013, 10h35

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