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

Bibliothèques & Frameworks Discussion :

Passage paramètre / setStyle [Prototype]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web en Loisir
    Inscrit en
    Janvier 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en Loisir

    Informations forums :
    Inscription : Janvier 2006
    Messages : 129
    Points : 100
    Points
    100
    Par défaut Passage paramètre / setStyle
    bonjour,
    Ca fait 2 jours que je tourne en rond alors j'ai besoin d'aide.
    J'ai recopié les 2 scripts
    - camelize qui enlève les tirets par ex : background-color devient backgroundColor
    - setStyle
    provenant des librairies Prototype.js dans mon <head> et ajouté la ligne en gras pour ajouter la fonction cameliz comme une extension de l'objet String. Je voulais ensuite en cliquant sur le bouton que j'ai défini changer le background avec setStyle. Ca ne marche pas.

    Voir post dans mon 2è message pour le code

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Web en Loisir
    Inscrit en
    Janvier 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en Loisir

    Informations forums :
    Inscription : Janvier 2006
    Messages : 129
    Points : 100
    Points
    100
    Par défaut
    J'ai cerné un peu mieux le problème. En faisant :
    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
     
    <head>
    <script type="text/javascript">
    function cameliz() {
        return "backgroundColor";
    }
    String.prototype.camelize = cameliz;
     
    function setStyle(element, style) {
        element = document.getElementById(element);
        for (name in style) {
          alert(name);
    	}
      }
     
    function gris() {
    	setStyle("body", {background-color: "grey"});
    }
    </script>
    </head>
    <body>
    <div id="body">
    <input type="button" onclick="gris();" value ="Griser"/>
    </div>
    </body>
    La fonction alert(name) ne fonctionne pas. Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setStyle("body", {backgroundColor: "grey"});
    Ca marche
    J'en déduis donc que si je mets un tiret, name ne peut même pas être évalué ???????

    Je suis perdu !!

  3. #3
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    Bonjour

    C'est ton systeme de notation qui ne va pas :
    {background-color: "grey"}

    La notation entre {} ne définit pas une variable, mais plutot un bloc, ou un objet. Résultat : background-color est sémantiquement faux, d'où une erreur de syntaxe.

    Au passage, éviter des "noms connus" pour les variables, comme name ou style.C'est générateur d'horreurs parfois difficiles à détecter. Utiliser à la rigueur name_ et style_, par exemple


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web en Loisir
    Inscrit en
    Janvier 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en Loisir

    Informations forums :
    Inscription : Janvier 2006
    Messages : 129
    Points : 100
    Points
    100
    Par défaut
    Merci pour ta réponse.
    Mais pourtant, on peut utiliser la fonction alert sur un objet ????
    Ci joint les fonctions de la librairie prototype.

    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
     
    setStyle: function(element, style) {
        element = document.getElementById(element);
        for (name in style)
          element.style[name.camelize()] = style[name];
      },
    camelize: function() {
        var oStringList = this.split('-');
        if (oStringList.length == 1) return oStringList[0];
     
        var camelizedString = this.indexOf('-') == 0
          ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
          : oStringList[0];
     
        for (var i = 1, len = oStringList.length; i < len; i++) {
          var s = oStringList[i];
          camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
        }
     
        return camelizedString;
      },

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web en Loisir
    Inscrit en
    Janvier 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en Loisir

    Informations forums :
    Inscription : Janvier 2006
    Messages : 129
    Points : 100
    Points
    100
    Par défaut utilisation librairie prototype
    En fait, même ce simple code utilisant la librairie prototype ne fonctionne pas.
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
    <head>
    <title>Site</title>
    <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
    <script src="prototype.js" type="text/javascript"></script>
    </head>
    <body>
    <div id="body">
    <h1>Site</h1>
    <img alt="Page en construction" src="accueil.jpg" />
    </div>
    <div>
    <input type="button" onclick="setStyle('body', {background-color: 'grey'});" value ="Griser" />
    </div>
    </body>
    </html>

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    Ce que tu fais est faux.
    Il faut faire comme ça :
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
    <head>
    <title>Site</title>
    <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
    <script src="prototype.js" type="text/javascript"></script>
    </head>
    <body>
    <div id="body">
    <h1>Site</h1>
    <img alt="Page en construction" src="accueil.jpg" />
    </div>
    <div>
    <input type="button" onclick="$('body').setStyle({background-color: 'grey'});" value ="Griser" />
    </div>
    </body>
    </html>

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur Web en Loisir
    Inscrit en
    Janvier 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en Loisir

    Informations forums :
    Inscription : Janvier 2006
    Messages : 129
    Points : 100
    Points
    100
    Par défaut
    Merci Eyolas et merci roro.
    J'ai trouvé comment utiliser setStyle.
    setStyle fait partie de l'objet Element.

    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
     
    <head>
    <title>Site</title>
    <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
    <script src="prototype.js" type="text/javascript"></script>
    <script>
    function gris() {
            alert("coco-lapin".camelize());
    	Element.setStyle("body", {backgroundColor: "grey"});
    }
    </script>
    </head>
    <body>
    <div id="body">
    <h1>Site de l'équipe 2</h1>
    <img alt="Page en construction" src="accueil.jpg" />
    </div>
    <div>
    <input type="button" onclick="gris();" value ="Griser" />
    </div>
    Par contre, ça fonctionne toujours pas avec background-color alors que dans le code de la fonction setStyle (voir précédent post), la fonction camelize est utilisée pour résoudre le problème.
    Comme tu me le disais, il semble y avoir un problème de type mais je n'arrive pas à trouver comment faire. On doit y arriver en n'utilisant pas la notation objet entre les {}.
    Mais bon, c'est justement fait exprès pour la lisibilité.
    Quand on exécute le programme, il donne bien cocoLapin et grise le div.
    La fonction camelize fonctionne parfaitement mais pas dans setStyle, c'est curieux????

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur Web en Loisir
    Inscrit en
    Janvier 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en Loisir

    Informations forums :
    Inscription : Janvier 2006
    Messages : 129
    Points : 100
    Points
    100
    Par défaut
    Bon du coup, je fais comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function setStyle(element, stylez, attri) {
        element = document.getElementById(element);
        element.style[stylez.camelize()] = attri;
      }
    puis pour appeler la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setStyle("body", "background-color", "grey");
    Merci pour tout

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

Discussions similaires

  1. [ Struts ] [ Jsp ] [ Javascript ] Passage paramètre
    Par bouchette63 dans le forum Struts 1
    Réponses: 7
    Dernier message: 23/05/2006, 14h04
  2. Exécution d'un prog avec passage paramètres
    Par licorne dans le forum C
    Réponses: 3
    Dernier message: 04/05/2006, 13h05
  3. [SQLSERVER]Pb passage paramètre procédure stockée
    Par galinijay dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/08/2005, 11h59
  4. [JSP] Problème passage paramètre
    Par besco dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 13/09/2004, 10h15
  5. Fenêtre enfant MDI : passage paramètre à la création
    Par Orangina dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/07/2004, 11h55

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