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

XSL/XSLT/XPATH XML Discussion :

[XSLTL]passage d'une valeur à JavaScript


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut [XSLTL]passage d'une valeur à JavaScript
    Salut tous,

    J'ai un tableau en XML qui est mis en forme par XSL et ce que j'aimerais c'est de passer une valeur de XML à un JS quand une case est coché dans le tableau.

    Merci si vous pouvez m'aider ou me donner une piste!

    Alors voilà le XML (juste avec une entrée):

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="page.xsl"?>
    <PRODUITS>
    <PRODUIT CODE="2321" CAT="TV">
    <NOM>TV 16/19</NOM>
    <REF>ASG1619</REF>
    <MARQUE>XML TV</MARQUE>
    <PRIX>1243</PRIX>
    <CHK>box</CHK>
    </PRODUIT>
    <PRODUITS>

    Et l'XSL:
    ... il y a un JS déjà pour afficher autre choses sur la page, mais ce qui est important vient là:
    ...
    ...

    <TABLE STYLE="width:100%">

    <TR STYLE="background='lightgrey' ">
    <TD>Types de produit</TD>
    <TD>Noms</TD>
    <TD>Marques</TD>
    <TD>Références</TD>
    <TD>Prix</TD>
    <TD>Select</TD>
    </TR>
    <xsl:apply-templates/>
    <TR STYLE="background='white' ">
    <TD colspan="4">PRIX TOTAL</TD>
    <TD>asd</TD>
    <TD><input type="button" value="Calculer" onclick="codeJS()"></input></TD>
    </TR>


    </TABLE>

    </BODY>

    </HTML>
    </xsl:template>

    <xsl:template match="PRODUITS">
    <xsl:for-each select="PRODUIT">
    <xsl:element name="TR">
    <xsl:choose>
    <xsl:when test=".[@CAT='TV']">
    <xsl:attribute name="STYLE">
    background="lightblue"
    </xsl:attribute>
    </xsl:when>
    <xsl:when test=".[@CAT='LL']">
    <xsl:attribute name="STYLE">
    background="#53A32F"
    </xsl:attribute>
    </xsl:when>
    <xsl:when test=".[@CAT='INFO']">
    <xsl:attribute name="STYLE">
    background="#F235B2"
    </xsl:attribute>
    </xsl:when>
    <xsl:otherwise>
    <xsl:attribute name="STYLE">
    background="yellow"
    </xsl:attribute>
    </xsl:otherwise>
    </xsl:choose>
    <xsl:element name="TD">
    <xsl:choose>
    <xsl:when test=".[@CAT='TV']">Télévision</xsl:when>
    <xsl:when test=".[@CAT='LL']">Lave-linge</xsl:when>
    <xsl:when test=".[@CAT='INFO']">Informatique</xsl:when>
    <xsl:otherwise>Produit inconnu</xsl:otherwise>
    </xsl:choose>
    </xsl:element>
    <xsl:element name="TD">
    <xsl:value-of select="NOM"/>
    </xsl:element>
    <xsl:element name="TD">
    <xsl:value-of select="MARQUE"/>
    </xsl:element>
    <xsl:element name="TD">
    <xsl:value-of select="REF"/>
    </xsl:element>
    <xsl:element name="TD">
    <xsl:value-of select="PRIX"/>
    </xsl:element>
    <xsl:element name="TD">

    <input name="box" type="checkbox" id="box1" onclick="javascript:readInput('{PRIX}')"/> <---Ceci marche pas!!
    </xsl:element>

    </xsl:element>
    </xsl:for-each>
    </xsl:template>

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Le {PRIX} marche bien chez moi. Sinon je trouve que les tests sur .[@attr='valeur'] sont un peut pompeux, normalement c'est utiliser lorsqu'on souhaite ne selectionner que certains noeuds parmis plusieurs. Là c'est forcément le noeud courant, donc on peut s'en passer.
    La syntaxe CSS me parait aussi étrange.
    J'ai testé ça qui marche :
    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
    40
    41
    42
    43
    44
    45
    <xsl:template match="PRODUITS">
          <xsl:for-each select="PRODUIT">
             <xsl:element name="TR">
     
                <xsl:attribute name="STYLE">
                <xsl:choose>
                   <xsl:when test="@CAT='TV'">background: lightblue;</xsl:when>
                   <xsl:when test="@CAT='LL'">background: #53A32F;</xsl:when>
                   <xsl:when test="@CAT='INFO'">background: #F235B2;</xsl:when>
                   <xsl:otherwise>background: yellow;</xsl:otherwise>
                </xsl:choose>
                </xsl:attribute>
     
                <xsl:element name="TD">
                   <xsl:choose>
                      <xsl:when test="@CAT='TV'">Télévision</xsl:when>
                      <xsl:when test="@CAT='LL'">Lave-linge</xsl:when>
                      <xsl:when test="@CAT='INFO'">Informatique</xsl:when>
                      <xsl:otherwise>Produit inconnu</xsl:otherwise>
                   </xsl:choose>
                </xsl:element>
     
                <xsl:element name="TD">
                   <xsl:value-of select="NOM" />
                </xsl:element>
     
                <xsl:element name="TD">
                   <xsl:value-of select="MARQUE" />
                </xsl:element>
     
                <xsl:element name="TD">
                   <xsl:value-of select="REF" />
                </xsl:element>
     
                <xsl:element name="TD">
                   <xsl:value-of select="PRIX" />
                </xsl:element>
     
                <xsl:element name="TD">
                <input name="box" type="checkbox" id="box1" onclick="javascript:readInput('{PRIX}')" />
     
               </xsl:element>
             </xsl:element>
          </xsl:for-each>
       </xsl:template>

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse.
    Est-ce que j'aurais pas compris quelque chose???
    Pour moi ceci:
    <input name="box" type="checkbox" id="box1" onclick="javascript:readInput('{PRIX}')" />

    affiche {PRIX}, mais pas la valeur dans PRIX.

    Je me demande si je fais pas une boulette dans ma fonction JS...

    Donc j'ai fait ceci:

    function readInput(prix){
    alert(prix);
    }
    et ceci affiche litteralement {PRIX} et pas ce qui est dans le XML.

    Merci pour m'éclairer

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    C'est très étrange, c'est quoi ton processeur xslt?
    Sinon tu peux tester cette syntaxe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <TD>
      <input name="box" type="checkbox" id="box1">
        <xsl:attribute name="onclick">javascript:readInput('<xsl:value-of select="PRIX"/>')</xsl:attribute>
      </input>
    </TD>

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci Morbo pour tes réponses!

    Finalement le prof m'a donné un pti coup de main et comme ça j'ai pu faire ce que je voulais.

    Alors voici le code XSL de mon element input:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            <xsl:element name="TD">
              <xsl:variable name="price" select="number(PRIX)"/>
                <xsl:element name="input">
                  <xsl:attribute name="name">Box<xsl:value-of select="number(@BCODE)"/></xsl:attribute>
                  <xsl:attribute name="type">checkbox</xsl:attribute>
                  <xsl:attribute name="id"><xsl:value-of select="number(@BCODE)"/></xsl:attribute>
                  <xsl:attribute name="onclick">javascript:readInput(<xsl:value-of select="$price"/>,this)</xsl:attribute>
                </xsl:element>
             </xsl:element>
    L'attribut BCODE est dans le XML pour pouvoir donner un nom différent aux box qui sont générés dynamiquement.

    Et ici le 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    var boxId = new Array();
    var resultat = 0;
    var i  = 0;   
     
    function readInput(prix,checkbox){
     
      var x = checkbox.checked;
      if(x == true){
        resultat += prix;
        boxId[i] = checkbox;
        i++;
        }else{
          resultat = resultat - prix;
          i--;
          boxId[i] = checkbox;
        }
      if(resultat < 0) resultat = 0;
      }
     
    function showOutput(){
     
      OUTPUT.innerHTML= resultat;
      resultat = 0;
      for(var j = 0;j<=i-1;j++){
        boxId[j].checked = false;
      }
      i = 0;
    }
    Le JS donc additionne le prix où il y a des cases cochés et il y a un bouton qui affiche le résultat et enlève les coches et réinitialise les variables en appelant showOutput() .

Discussions similaires

  1. passage d'une valeur javascript dans un lien
    Par sosophie dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/04/2007, 09h14
  2. [Débutant]récupération d une valeur javascript en html
    Par tx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/07/2006, 10h58
  3. [Javascript] Recuperer une valeur javascript
    Par samplaid dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/03/2006, 09h26
  4. [VB]Passage d'une valeur NULL à un champ de type date?
    Par anikeh dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 01/02/2006, 17h04
  5. passage d'une variable javascript dans du html
    Par the_ugly dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/02/2006, 16h08

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