[javascript] question de noobz

Salut à tous,
Voilà la fonction que j’aimerai faire, mais elle ne semble pas marcher, (dans le cadre d’une page php)


function test(j) {
for (i=0; i<j; i++)
	{toto('nom-' + i);
	}

toto est une autre fonction qui prend en paramètre une chaine de caractère.

Je voudrai que ça fasse donc quand j’appelle la fonction test(5):

toto('nom-0');
toto('nom-1');
toto('nom-2');
toto('nom-3');
toto('nom-4');
toto('nom-5');

Oui je sais c’est basique mais je comprends pas pourquoi ça marche pas :slight_smile:

il manque une accolade fermante dans ton code de ‘test’, ça doit être ça le problème parce que ça marche sans problème avec.

Je te conseille d’indenter ton code quand tu l’écris c’est plus lisible pour voir ce type de problème, et aussi d’utiliser un éditeur qui mets en valeur les paranthèses/accolades qui se correspondent.

Ah bah oui c’était tout con en fait c’est bien ce que je disais :MDR

Et si je veux rentrer un tableau de nombre en paramètre comment je dois procéder?

function test(tab) {
     for (i=0; i<tab.length; i++)
     {
         toto('nom-' + tab[i]);
     }
}

var tableau = new Array(1,2,3,4,5,18,42);
test(tableau);

Tout simplement comme ça, tu passes un tableau à ta fonction qui parcourt tous les éléments.

es ce que ça a une incidence si mon tableau rentrée en paramètre c’est à dire ‘tableau’ quand je fais

 test(tableau);

est crée par le script php?

Non ça n’a pas d’incidence. Avec php tu génères la page html qui sera affichée par le navigateur. Donc c’est toi qui génère ce que tu veux, si tu veux générer tu code javascript à partir de ton code php ça ne pose pas de problème. Par contre, j’aimerais bien savoir ce que tu cherches à faire pour avoir besoin de mélanger php et javascript ?

D’abord merci pour tes réponses :slight_smile:

Sinon pour t’expliquer, en gros le tableau est en fait un ensemble de chiffre ‘ID’ venant d’une base de donnée (exploité par php donc).

En fonction de ces chiffres, je vais afficher ou non sur ma page un certain nombre d’information (donc avec un js qui permet de cacher/montrer des divs)

En espérant avoir été clair :riva:

Ok c’est clair, en gros ton code en php va ressemebler à ça:

<?
    //Je suppose qu'on est dans le html généré à l'endroit où on crée le tableau javascript
     // $tableau contient les id que tu veux utiliser

     $js ="var tableau = new Array(";
     for($i = 0; $i < count($tableau);$i++)
     {
         if($i !=0)
            $js.= ', ';
         $js.= $tableau[$i];
     }
     $js.= ");";

    echo $js;
?>

et apres quand j’appelle mon fonction test, je lui met $js en paramètre ?

test($js)

Parce que si c’est ça, où j’ai mal recopier, ou ça ne marche po.

Non, tu mets test(tableau).
$js est une variable php, elle ne sert que dans ton script php. Le javascript qui est dans le html généré, et qui appelle la fonction ‘test’ lui connait seulement la variable ‘tableau’ que tu as généré dans ton html grâce au bout de code php juste au dessus.

Erf j’ai pas bien compris ça :frowning:
en tout cas ça ne marche pas.

comment javascript connait la variable ‘tableau’ ?
A quoi elle sert $js ? (à part rien :stuck_out_tongue: )
quand j’appelle la fonction test, c’est dans le code php, comment il peut connaitre la variable ‘tableau’ ? :neutre:

Arf, je croyais que test était une fonction javascript, parce que si c’est le cas php peut pas s’en servir.

Résumons : test c’est une fonction php et toto c’est du javascript ou du php?

pour test mets ça dans ton php:


function test ($tableau)
{
	foreach($tableau as $valeur)
  toto($valeur);
}

Cette fonction va executer la fonction php ‘toto’ avec les différentes valeurs du tableau pasé en argument.

Si c’est des fonctions javascript, qui s’execute lors d’un “onclick”

en fait il faudrai que je trouve un moyen de passe mon tableau php en un tableau javascript.

Simple : suffit de générer du javascript avec php. ie:

$first =true;
echo 'var x = [';
foreach($tableau as $valeur) {
  if ($first) $first = false;
  else echo ', ', "\n";
  echo "'", addslashes($value), "'";
}
echo '];';

C’est un peu ce que j’avais fait plus haut :wink: