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 :

Problème d'accès à une fonction js insérée dans un div via XSLT


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Problème d'accès à une fonction js insérée dans un div via XSLT
    Tout d'abord, bonjour a tous, c'est mon premier post sur ce forum.
    J'ai essayé tant bien que mal de résoudre ce problème tout seul, mais la j'aurai besoin d'un coup de main avant que je sombre dans une folie irréversible...

    Je pense que mon problème concerne le javascript uniquement, mais pour info, je bosse sur une app web qui utilise du AJAX, XML et XSLT, avec la librairie prototype.js secondé par le framework freja.js.

    Infos préliminaires :
    Un client appelle un module qui s'écrit dans un div "module".
    On va dire que le client, avant ca, est vide, si ce n'est qu'il contient qq fonctions js.
    Le module quant a lui, a ses propres fonctions js.
    Dans ce module, un appel de fonction, getList(), est rattaché sur le onChange d'un select du module.
    La fonction getList est définie entre des balises script, qui lui-meme est inséré dans le div "module" avec tout le reste.

    Le problème :
    Une fois le module loadé, lorsque j'utilise le select, une erreur est renvoyée comme quoi la fonction est non définie.

    Les contraintes :
    Je ne veux pas déporter la définition de la fonction concernée ailleurs (par ex sur la page du client avant insertion du module). Je voudrais qu'elle reste a l'intérieur du div.
    En gros, je veux séparer clairement les définitions des fonctions de la page client "nature" et celles du module.


    Appremment, il ne repère pas la définition dans le div.
    Autre chose, quand je veux afficher le code source de la page, apres insertion du module (qui s'affiche parfaitement, avec ses selects), le div est quand meme vide, les infos ne sont pas lisibles. C'est peut-etre lié à ça, bien que ca m'étonnerait.

    Source de la page client (on voit la meme chose, avant ou apres insertion du module) :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    <html>
     
    ...
     
    <script type='text/javascript' src='js/prototype.js'></script>
    <script type='text/javascript' src='controller/freja.js'></script>
    <script type='text/javascript' src='controller/mvc.js'></script>
     
    ...
     
    <script>
     
    function initNAV()
    {
     
            //execute le serveur pour générer le xsl
            var url = 'serveur_nav.php';
            var pars = 'mode=init';
            var myAjax = new Ajax.Request( url, {method: 'get', parameters: pars, onComplete: load_nav} );
     
    }
     
    function load_nav()
    {
        MVC_start( 'models/data.xml', 'views/NAV_mod.xsl', 'module' );
    }
     
    </script>
     
    <input type='button' value='module NAV' onclick='initNAV();' >
     
     
    <div id='module'> 
     
    ...
     
    </body>
    </html>
    la fonction load_nav() récupère le module (xml+xsl) en asynchrone et l'insère dans le div "module". Ca, ca marche.

    Je vous met quand meme la fonction MVS_start de mvc.js (qui se base sur freja), sait-on jamais... :

    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
    17
     
    function MVC_start( pathXML, pathXSL, resultDIV )
    {
        var data    = new Model( pathXML ); //'models/bible.xml'
        var display = new View( pathXSL ); //'views/NAV_mod.xsl'
        Controller.onLoadComplete = showMe;
        Controller.loadAssets();
     
        function showMe() 
        {
            if ( resultDIV )
                Controller.render(data, display, { placeholder: resultDIV }); //'content'
            else
                Controller.render(data, display );
        }
     
    }


    Le template XSL sur la racine du xml, avec la définition du script :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <!-- NAV module -->
    <xsl:template match="/">
     
    ...
     
    <script language='javascript'>
    function getList()
                        {
                            var levelID = $('level_id').innerHTML;
                            var levelNUM = $('level_num').innerHTML;
                            var url = 'xml-ajax_navigator.php';
                            var pars = 'levelID=' + levelID + '%26' + 'levelNUM=' + levelNUM;
                            var myAjax = new Ajax.Request( url, {method: 'get', parameters: pars, onLoading: showLoading, onComplete: showResponse} );
                        }
    </script>
     
    ...
     
    <div id='level_id'>0</div>
    <div id='level_num'>0</div>
     
    <xsl:apply-templates />
    </xsl:template>

    Le template du SELECT, avec l'appel de la fonction getList() :

    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
    17
     
    <xsl:variable name="xlevel_num">
    <xsl:value-of select="intranet/navigator/@level_num"/>
    </xsl:variable>
     
    <!-- SELECT liste -->
    <xsl:template match="intranet/navigator/levels[@num &lt;= $xlevel_num]">
    <select name="liste" onChange="javascript:
                                $('level_id').innerHTML= this.value;
                                $('level_num').innerHTML= {@num};
                                getList();">
    <option value="0">--------</option>
    <xsl:apply-templates select="./level"/>
    </select>
    </xsl:template>
     
    ....
    Chose étonnante : l'accès aux divs "level_id" et "level_num" ne pose pas de pb, alors qu'avec la fonction oui. Ils sont pourtant définis cote a cote...

    Bon, ca fait beaucoup, je risque d'en faire partir plus d'un mais qui ne tente rien n'a rien...
    J'ai essayé d'etre le plus clair possible, mais ayant pas mal la tete dans mon truc, j'imagine que ce qui me semble clair peut paraitre compliqué de l'extérieur...

    Donc si quelqu'un a une idée... qu'il n'hésite pas !!
    Merci d'avance pour votre aide !

  2. #2
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Une petite recherche dans les forums devrait te donner une idée...
    http://www.developpez.net/forums/sho...X+Script+Fremy

    Ajout prochain dans la FAQ :
    http://www.developpez.net/forums/sho...89#post1185289
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    waouw excellent, merci !
    m'en vais tester tout ca.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bon bin Fremy écoute c'est nikel, j'ai intégré tes fonctions et ca marche tres bien !!
    Chapeau et merci beaucoup !!
    c'est reparti pour le fun !!

    Au fait je pense que ca serait pas mal que tu rajoutes dans la faq l'histoire de la déclaration :

    Ca ne pose qu'une seule contrainte :
    pour déclarer une fonction, ne pas faire :

    function MaFunc() {}

    mais bien

    MaFunc=function() {}
    a+ !
    ps : pour ceux que ca intéresse (plutot les flemmards), j'ai updaté le framework freja avec ces nouvelles fonctions...

  5. #5
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Ah oui, en effet... Je rajoute ca à mon poste !
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/08/2010, 14h19
  2. Réponses: 10
    Dernier message: 14/03/2009, 13h36
  3. Réponses: 3
    Dernier message: 18/05/2007, 16h03
  4. [Mail] Problème d'accès à une fonction
    Par Lordsephiroth dans le forum Langage
    Réponses: 3
    Dernier message: 04/05/2006, 20h46
  5. Réponses: 7
    Dernier message: 10/09/2005, 16h49

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