.innerHTML pour afficher une fonction

Messages postés
1
Date d'inscription
mercredi 6 janvier 2016
Statut
Membre
Dernière intervention
6 janvier 2016
-
Bonjour,

Je débute à Javascript et je n'arrive pas à afficher une fonction en HTML en utilisant .innerHTML... Je ne vois vraiment pas ce qui cloche....

JAVASCRIPT:
var somme = 0;
var nombre = 100;
var tableau = [];


//remplir un tableau de 100 cases et l'afficher grâce à .innerHTML

function remplissage(tableau,nombre){
  for(i=0;i<nombre;i++){
    tableau[i]=i;
  }
  document.getElementById("tableau2").innerHTML=tableau.join();
}

//Calculer la moyenne par une fonction et l'afficher

function moyenne(tableau){
  for(i=0;i<tableau.length;i++){
    somme+=tableau[i];
  }
  moyenne = somme/tableau.length;
  return moyenne;
  
}

document.getElementById("moyenne2").innerHTML=moyenne(tableau);

//appel
remplissage(tableau,nombre);
afficher("Moyenne 0 à 100", moyenne(tableau));



HTML:
<p id="tableau2"></p>
Moyenne:<p id="moyenne2"></p>



Le message NaN s'affiche...

Je vous remercie d'avance pour votre précieuse aide!


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

2 réponses

Messages postés
25763
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2019
312
0
Merci
Bonjour,

En utilisant les outils de debogage de ton navigateur internet (perso.. je te recommande d'utiliser le plugin FireBug pour FireFox )
Tu obtiens ceci :

jordane45
Messages postés
25763
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2019
312 -
Ensuite... tu regarderas bien ton code....
Tu cherches à afficher la Moyenne ...... AVANT d'avoir fait le remplissage de ton tableau....
Commenter la réponse de jordane45
Messages postés
268
Date d'inscription
lundi 9 janvier 2006
Statut
Membre
Dernière intervention
19 janvier 2017
2
0
Merci
function moyenne(tableau){
  for(i=0;i<tableau.length;i++){
    somme+=tableau[i];
  }
  moyenne = somme/tableau.length;
  return moyenne;
  
}


Je pense que la réponse au non fonctionnement de votre code se trouve dans la rédaction de la fonction moyenne.
Dans une fonction, vous pouvez utiliser les paramètres qui sont placés entre parenthèses (ici tableau). Mais vous ne pouvez pas utiliser le nom de la fonction comme variable. La fonction devra être récrite comme suit :
function moyenne(tableau) {
  var i = 0, moy = 0, somme = 0;
  for (; i < tableau length; i++) {
       somme += tableau[i];
       }
  moy = somme/tableau.length;
  return moy;
}


Anomalies à corriger :
- toujours déclarer les variables locales avec var car les variables non déclarée deviennent globales, cela peut donner des effets inattendus en cas de réutilisation de ces noms de variables.

- ne jamais utiliser le nom de la fonction comme nom de variable locale. Le nom de la fonction peut être utilisé à l'intérieur d'une fonction récursive, mais dans ce cas il sera toujours accompagné des parenthèses ex. moyenne().

- les variables d'incrémentation (ici i) doivent aussi être déclarées, dans notre cas deux possibilités:
-- en début de fonction comme je viens de le faire,
-- dans la boucle for comme ceci : for (var i = 0; i<tableau.length; i++) {

Bon courage!.....
jordane45
Messages postés
25763
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2019
312 -
Bonjour,


Je pense que la réponse au non fonctionnement de votre code se trouve dans la rédaction de la fonction moyenne.

Non.
Comme indiqué dans mon message précédent (du 6 Janvier) ... le premier souci vient d'une fonction appelée... inexistante !


Dans une fonction, vous pouvez utiliser les paramètres qui sont placés entre parenthèses (ici tableau). Mais vous ne pouvez pas utiliser le nom de la fonction comme variable.

Ah ??
Pourtant ça fonctionne très bien.... (même si je suis bien d'accord.. que c'est à éviter (surtout pour éviter de se mélanger les pinceaux..))


toujours déclarer les variables locales avec var car les variables non déclarée deviennent globales,

Il ne me semble pas (pour le côté global...)
Par contre, une chose est sûr... certains navigateurs (surtout IE pour ne pas le citer) n’apprécient pas.
Il est donc, en effet, fortement recommandé de déclarer ses variables avec le var.

Pour déclarer une variable "globale" il suffit de la déclarer en dehors de toute fonction.
par exemple :
var mavaribleglobale = "toto";

function test(){
 alert(mavaribleglobale );
}

Commenter la réponse de cs_jperre