CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

javascript récupérer la valeur d'un input

tobi-31
tobi-31
Niveau 19
31 juillet 2019 à 13:09:24

Bonjour :)

je me tourne vers vous car j'ai un petit problème depuis hier que je n'arrive pas à résoudre.

je débute javascript, pour tester mes connaissances j'ai décider de me faire une page pour mon budget ^^,

donc voila l'idée c'est de mettre un chiffre dans un input number et de récupérer cette valeur pour l'additionner à ma variable "solde" quand je clique sur le bouton ajouter, sauf que ben rien ne fonctionne ^^ et dans la console je n'ai pas d'erreur, je ne vois pas ou je me suis tromper donc je suppose que je fais pas les bonne choses.

je vous met le code :

let solde = 0;

const description = document.getElementById("soldeMessage");

const ajout = document.getElementById("numberAjout");

const debit = document.getElementById("numberDebit");

const btnAjout = document.getElementById("bouttonAjout");

const btnDebit = document.getElementById("bouttonDebit");

description.innerHTML = `Votre solde est de ${solde}€`;

function add() {
const addition = ajout += solde;
return addition;
};

ajout.addEventListener('input', function (e){
ajout = e.target.value;
});

btnAjout.addEventListener('click', add());

merci et bonne journée :)

Jabuyabu
Jabuyabu
Niveau 10
31 juillet 2019 à 19:27:15

Plusieurs problèmes :
const addition = ajout += solde; est équivalent à const addition = (ajout = (ajout + solde))
Or ajout est immutable (const), tu ne peux pas modifier sa valeur, donc tu te prends une erreur " invalid assignment to const".

Même chose dans ajout.addEventListener : ajout = e.target.value;

Ensuite, tes constantes ajout et debit sont des éléments HTML, ce ne sont pas des nombres, tu ne peux pas les manipuler comme tu le fais.

De même, btnAjout.addEventListener('click', add()) ne fait pas ce que tu veux. Là tu appelles la fonction add() une seule fois, elle crée une constante addition, lui assigne la somme des constantes globales ajout et solde (je pars du principe que const addition = ajout + solde et non pas ajout += solde) et retourne la valeur de cette nouvelle constante. C'est tout. La méthode addEventListener ne va pas "magiquement" attribuer la valeur de retour de add() à ton solde.

Enfin, description.innerHTML = `Votre solde est de ${solde}€`; est appelé une seule foi, lorsque l'interpréteur JS lit cette ligne. Elle ne sera jamais rappelée, et donc jamais mise à jour.

-----------------------

Voici un exemple de code qui fait partiellement le boulot. J'ai essayé de rester proche de ton code. C'est très imparfait, c'est vraiment pour illustrer et te permettre de comparer :
https://jsfiddle.net/7kevLch1/5/

tobi-31
tobi-31
Niveau 19
31 juillet 2019 à 21:18:19

Merci pour la réponse et le temps consacré :) après 30min a relire et relire ton code j'ai compris ou était mes erreurs ^^.

quelques question par ailleurs :

- je pensais que pour additionner des variables il fallait utiliser "+=" du coup maintenant je me demande si c'est pas pour simplement rajouter un entier a une variable ? :(

- donc tu me conseille à l'avenir d'utiliser que des variables locales ? pourquoi les globales c'est le mal ^^ ?

et concernant l'écouteur de bouton ajout, tu me dis qu'il ne faut pas mettre de () à add et je ne comprend pas bien pourquoi, j'ai suivis les cour gratuit d'openclassroom pour apprendre le javascript et eux a chaque écouteur appellent une fonction avec les (), même quand il n'y a pas de paramètre.

Jabuyabu
Jabuyabu
Niveau 10
31 juillet 2019 à 23:10:29

- je pensais que pour additionner des variables il fallait utiliser "+=" du coup maintenant je me demande si c'est pas pour simplement rajouter un entier a une variable ? :(

+= est un l'opérateur d’affectation additionneur, comme son nom l'indique il additionne une valeur à celle d'une variable et affecte le résultat à cette variable. Autrement dit, écrire a+=b revient à écrire a=a+b.
L'opérateur addition est tout simplement +. Utiliser "+=" c'est un simple raccourci, tout comme i++ est un raccourci pour éviter d'avoir à écrire i=i+1.

Exemple : https://jsfiddle.net/38tLj0ar/

- donc tu me conseille à l'avenir d'utiliser que des variables locales ? pourquoi les globales c'est le mal ^^ ?

C'est mal à cause de ce qui s'apelle la collision de variables, c'est à dire le fait d'écraser des variables utilisées par un autre code sans que cela soit prévu. Exemple : https://jsfiddle.net/0mj85ynu/
Là c'est un exemple à la con, mais tu imagines bien que quand tu as des bouts de scripts un peu partout ça devient redoutable.
Plus d'infos : https://www.w3.org/wiki/JavaScript_best_practices#Avoid_globals

Concernant l'écouteur de bouton ajout, tu me dis qu'il ne faut pas mettre de () à add et je ne comprend pas bien pourquoi, j'ai suivis les cour gratuit d'openclassroom pour apprendre le javascript et eux a chaque écouteur appellent une fonction avec les (), même quand il n'y a pas de paramètre.

Je ne connais pas le cours d'Openclassroom, mais ce que je peux te dire c'est qu'il y a une différence fondamentale entre mettre des parenthèses ou non.
Quand tu écris add(), c'est un appel de fonction, tu dis à l’interpréteur d'exécuter immédiatement la fonction add.
Quand tu écris add sans parenthèses, tu es simplement en train de désigner l'objet de type Function qui contient le code de ta fonction add.
Pour plus d'infos : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions

Pour t'en convaincre, dis toi que

function add(a, b) {
 return a+b
}

est presque équivalent à

const add = function (a, b) {
 return a+b
}

Et donc tu peux faire des choses comme :

function apply(a, une_fonction_unaire){
  return une_fonction_unaire(a) // on applique la fonction une_fonction_unaire avec a en paramètre
}

const plus10 = function(x){ return x+10}
function moins10(x){return x-10)

apply(100, plus10) // retourne 110
apply(100, moins10)  // retourne 90

C'est d'ailleurs exactement ce qui se passe avec addEventListener. Tu lui donne un objet Function (appelé dans ce cas un Listener), lui l'enregistre dans sa liste de Listeners (d'où le nom, addEventListener), et il appellera cette fonction à chaque fois que l'évènement voulu se déclenchera.

Note1 : je dis presque parce qu'il y a une différence fondamentale entre les deux déclarations. Dans le premier cas la fonction est disponible pour l'ensemble du script dès son initialisation, mais ce n'est pas vrai pour le second cas. Autrement dit,

add(1,2) // fonctionne pourtant add est déclarée après.
function add(a,b){ return a+b }
add2(1,2) // error: TypeError: add2 is not a function --> add2 n'existe encore pas à ce stade
const add2 = function(a, b) {return a+b}

Note 2:

Quand tu écris

ajout.addEventListener('input', function (e){
ajout = e.target.value;
});

C'est comme si tu écrivais :


// Ceci est une déclaration de fonction, pas un appel
const mafonction = function(e){ajout = e.target.value} 
 
// On enregistre mafonction  comme Listener de ajout.
ajout.addEventListener('input', mafonction) 
Message édité le 31 juillet 2019 à 23:12:46 par Jabuyabu
Jabuyabu
Jabuyabu
Niveau 10
31 juillet 2019 à 23:18:33

Note 3 : de manière générale, Javascript est un langage qui est faussement facile parce que sa syntaxe est simple et qu'il y a une grosse communauté d'utilisateurs, mais il est rempli de bizarreries plus ou moins excusables (souvent moins que plus...) qui créent de très nombreux pièges pour les débutants. Tu viens d'en voir un premier avec les histoires de portée des variables (scoping en anglais si tu veux chercher). Tu apprends le JS pour un but précis? Sinon loin de moi l'idée de te faire changer d'avis mais si tu veux apprendre la programmation sur des bases saines je te conseille d'apprendre en parallèle un langage plus "propre" genre Python.

Message édité le 31 juillet 2019 à 23:18:49 par Jabuyabu
tobi-31
tobi-31
Niveau 19
01 août 2019 à 00:09:31

merci beaucoup pour toutes ces explications, je vais étudier tout ça point par point.

oui je suis jeune infographiste et je me dirige vers le webdesign et la création de site, j'ai fais une formation diplômante, pour avoir les bases en html css js et php. Le html et css ça va je me débrouille bien mais js et php c'est autre chose on a fait 1 semaine de js et 2 semaines de php pour avoir les bases, mais bon je trouve ça trop court même pour "des bases", maintenant que la formation et fini je profite des vacances d'été pour bien maîtriser le js et php. j'ai obtenu le diplôme mais je me vois mal me pointer dans une entreprise sans maitriser un minimum js et php. Et puis même si j'ai du mal pour le moment c'est quand même quelque chose que j'aime beaucoup ^^ .

Pour python j'ai cru comprendre que c'était pas trop approprier uniquement pour du web car c'est un peu lent ?

en tout cas merci pour ton aide :)

Jabuyabu
Jabuyabu
Niveau 10
01 août 2019 à 20:16:21

Pour python j'ai cru comprendre que c'était pas trop approprier uniquement pour du web car c'est un peu lent ?

Bon si t'es un infographiste python a assez peu d’intérêt pour ton métier. Continue avec JS mais redouble de vigilance sur la qualité de ton code (à l'aide de https://jstherightway.org/ par ex). Et si tu un tuto complet de longue haleine : https://www.grafikart.fr/tutoriels/javascript

Message édité le 01 août 2019 à 20:16:35 par Jabuyabu
tobi-31
tobi-31
Niveau 19
02 août 2019 à 07:53:01

ça marche, oui pas de problème :ok:

merci pour les liens et pour l'aide :)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment