1. #1
    Membre habitué
    Inscrit en
    février 2009
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 321
    Points : 152
    Points
    152

    Par défaut JavaScript et json_encode

    Bonjour,

    Dans une liste <select>, depuis onchange="", j'exécute la fonction test();
    afin de remplir une seconde liste select.

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <select id="mylist1" onchange="test('<?php echo json_encode($class->scriptData); ?>', 'mylist1', 'mylist2');"></select> <select id="mylist2""></select>

    Dans le fichier js:

    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
    function test(data, listA, listB){
    var scriptData = data;
     
    //alert(scriptData.element1); // valeur numérique max
     
    select = document.getElementById(listB);
    var max = scriptData.element1;
     
    for (var i = 1; i<= max; i++) {
     
        var opt = document.createElement('option');
        opt.value = i;
        opt.innerHTML = i;
        select.appendChild(opt);
    }
    }
    Ce code devrait fonctionner mais je tourne en rond depuis 1h.. le but est d'éviter ce genre de déclaration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript">
      scriptData = <?php echo json_encode($class->scriptData); ?>;
    </script>
    En fait, celui-ci fonctionne déjà ainsi mais je voudrais déclarer la variable scriptData directement dans la fonction test() et non à l'extérieure.

    Vous remerciant par avance pour votre réponse,

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    février 2009
    Messages
    5 703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2009
    Messages : 5 703
    Points : 21 041
    Points
    21 041
    Billets dans le blog
    39

    Par défaut

    Le code JS fonctionne dans mon test :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <select id="mylist1"></select>
    <select id="mylist2"></select>

    Code JavaScript : 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
    function test( data, listA, listB ){
    	var scriptData = data;
     
    	console.log( scriptData.element1 ); // valeur numérique max
     
    	var select = document.getElementById(listB);
    	var max = scriptData.element1;
     
    	for ( var i = 1; i <= max; i++) {
    		var opt = document.createElement( 'option' );
    		opt.value = i;
    		opt.innerHTML = i;
    		select.appendChild(opt);
    	}
    }
     
    test( { "element1" : 10 }, "mylist1", "mylist2" );

    L'erreur est sans doute dans le contenu de data, que donne un console.log( data );

    Blog



    Nota bene : si vous devez être compatible avec les navigateurs obsolètes (IE8 et plus), vous devez convertir les codes ES2015 en ES5 avec Babel.

    FAQ JS Tutoriels JS

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre habitué
    Inscrit en
    février 2009
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 321
    Points : 152
    Points
    152

    Par défaut

    Merci pour votre réponse,

    En fait tout fonctionne, c'est juste quand je remplace la déclaration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript">
      scriptData = <?php echo json_encode($class->scriptData); ?>;
    </script>
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function test( data, listA, listB ){
    	var scriptData = data; ...
    
    <select id="mylist1" onchange="test('<?php echo json_encode($class->scriptData); ?>', 'mylist1', 'mylist2');"></select>
    Qu'est-ce que vous avez mis dans le onchange ?

    Merci

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    juin 2003
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 6 284
    Points : 10 130
    Points
    10 130

    Par défaut

    regardez le code HTML généré dans les 2 cas. vous verrez que dans le 2nd cas, vous créez une chaine de caractères au lieu d'un objet JSON

  5. #5
    Membre habitué
    Inscrit en
    février 2009
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 321
    Points : 152
    Points
    152

    Par défaut

    Avez vous une solution à cela svp?

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    février 2009
    Messages
    5 703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2009
    Messages : 5 703
    Points : 21 041
    Points
    21 041
    Billets dans le blog
    39

    Par défaut

    <select id="mylist1" onchange="test(' " + <?php echo json_encode($class->scriptData); ?> + " ', 'mylist1', 'mylist2');"></select>

    Blog



    Nota bene : si vous devez être compatible avec les navigateurs obsolètes (IE8 et plus), vous devez convertir les codes ES2015 en ES5 avec Babel.

    FAQ JS Tutoriels JS

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Membre habitué
    Inscrit en
    février 2009
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 321
    Points : 152
    Points
    152

    Par défaut

    Bonjour,

    ne fonctionne pas non plus, j'ai aussi essayé ceci;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onchange="test(' + <?php echo json_encode($class->json_data); ?> + ', 'liste1', 'liste2'....

  8. #8
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    juin 2003
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 6 284
    Points : 10 130
    Points
    10 130

    Par défaut

    les guillemets simples ou doubles créent une chaine de caractère donc pour avoir un objet JSON, essayez sans ces guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onchange="test(<?php echo json_encode($class->json_data);?>, 'liste1', 'liste2'....

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

Discussions similaires

  1. Les meilleurs livres pour apprendre le JavaScript
    Par vermine dans le forum Livres
    Réponses: 22
    Dernier message: 24/08/2014, 23h54
  2. Réponses: 13
    Dernier message: 13/12/2013, 11h41
  3. JavaScript<---->ActionScript
    Par crazypiou dans le forum Flash
    Réponses: 21
    Dernier message: 17/04/2009, 17h14
  4. appel xmlservice via fonction javascript
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 06/05/2003, 14h24
  5. JavaScript de vérification de formulaire
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/02/2003, 13h48

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