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 :

Modifier les valeurs des propriétés d'un sélecteur


Sujet :

JavaScript

  1. #1
    Membre actif
    Homme Profil pro
    retraité, ex chef de projets en informatique
    Inscrit en
    Juillet 2005
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité, ex chef de projets en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2005
    Messages : 602
    Points : 249
    Points
    249
    Par défaut Modifier les valeurs des propriétés d'un sélecteur
    Bonjour,
    J'avais ouvert une discussion équivalente et je voudrais la supprimer car je me suis mal expliqué ce qui a entrainé des réponses hors sujet. Est-ce possible ? Je l'ai fermée ....
    Voici mon script ci-dessous.
    Entre les lignes 5 à 12 j'ai la description de la classe .ladiv
    Cette classe sert à afficher le <div ... > de la ligne 51 et c'est correct.
    Autour des lignes 29 à 34 je voudrais écrire des instructions qui permettent de changer les valeurs des propriétés de la classe .ladiv.
    SVP Comment écrire une ligne pour ce faire ? J'ai trouvé sur Internet plusieurs exemples que j'ai essayés de reproduire mais je ne réussis pas à obtenir le résultat espéré. Où est l'erreur de ma part ?

    Merci de vous en tenir à ce point. Je sais que les puristes vont trouver des choses à redire sur d'autres points du script. Je sais que je ne suis pas forcément à la mode et que je n'ai pas suivi les dernières normes !!. Mais hormis le point signalé, le reste tourne correctement.

    Marcel Marie

    Code html : 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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <html>
    <head>
    <title></title>
    <style type="text/css">
      .ladiv
      {
        position: absolute;
        top: 100px ;
        left: 60px ;
            width: 900px;
            height: 1200px;
      }
    </style>   
    </head>
    <body> 
    <script type="text/javascript">
    if (document.body)
    {
    var larg = (document.body.clientWidth);
    var haut = (document.body.clientHeight);
    } 
    else
    {
    var larg = (window.innerWidth);
    var haut = (window.innerHeight);
    }
    document.write("Cette fenêtre fait " + larg + " de large et "+haut+" de haut"); 
     
    var divTest = document.getElementById("ladiv");
    divTest.style.top = "300px";
    divTest.style.left = "600px";
     
    //document.getElementById("ladiv").style.top = "300px";
    //document.getElementById("ladiv").style.left = "600px";
    </script> 
     
    <script language="javascript">
    function showLayer(sName) {
    	if (self.document.all)
    		self.document.all[sName].style.visibility = "visible"	//hidden
    	else
    		self.document.layers[sName].visibility = "show"; //hide
    }
    function hideLayer(sName) {
    	document.getElementById(sName).style.visibility="hidden";
    }
    </script>
     
     
     <!--<div id="texte" class="texte" style="position: absolute; top: 100; left: 300; width: 900; height: 1200"> -->
     <div id="texte" class="ladiv" style="position: absolute" >  
      <table border="1">
        <tr>
          <td bgcolor="#7CFC00"><font color="#000000">Juste pour un essai à transformer</font></td>
        </tr>
        <tr>
          <td colspan="2" bgcolor="#7CFC00" bordercolor="#FF0000"><font color="#00FF00"><a style="color: red" href="javascript:hideLayer('texte');"><b><p align="center">Cliquer ICI supprime cette Fenêtre </p></b></a></font></td>
        </tr>
      </table>
    </div>
     
    </body>
    </html>

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    J'avais ouvert une discussion équivalente et je voudrais la supprimer car je me suis mal expliqué ce qui a entrainé des réponses hors sujet. Est-ce possible ? Je l'ai fermée ....
    il me semble qu'une explication à ceux qui se sont donné la peine de répondre ne serait pas incongru.

    Où est l'erreur de ma part ?
    Comme souvent rencontré et rappelé, il ne faut pas chercher à manipuler un élément qui n'existe pas encore dans le DOM.
    - document.getElementById("ladiv") arrive avant que l'élément n'apparaisse dans le BODY

    D'autre part
    - document.getElementById("ladiv") signifie que l'on cherche un élément à partir de son ID or dans ton code AUCUN élément ne posséde d'ID="ladiv"

    Merci de vous en tenir à ce point.
    et si on veut pas......bon ok! je cours me laver les yeux, mais il me semblais qu'une des forces de l'homme était de s'adapter et de progresser !

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Citation Envoyé par marcel marie Voir le message
    Autour des lignes 29 à 34 je voudrais écrire des instructions qui permettent de changer les valeurs des propriétés de la classe .ladiv.
    Une question pour clarifier : est-ce que tu veux modifier l'apparence de la <div> actuellement présente (1), ou bien de toutes les <div>, présentes et futures, de la page (2) ?

    Si c'est le premier cas, il te suffit de sélectionner correctement la <div> par son id :
    document.getElementById("texte"). Tu as aussi une façon alternative document.getElementsByClassName("ladiv")[0] mais tu conviendras qu'elle est moins pratique, et en plus elle ne sera pas compatible avec les navigateurs les plus vieux – à en juger par certains points dans ton code, tu as l'air de vouloir assurer une rétro-compatibilité assez poussée… Mais on a dit qu'on n'en parlait pas
    Une autre méthode encore plus récente (donc encore un peu moins compatible) : document.querySelector(".ladiv").

    Dans le second cas, tu vas devoir modifier « en vol » ta déclaration de style. Je ne sais pas du tout quelle compatibilité ça assure… L'idée est d'accéder aux feuilles de style via document.styleSheets, de trouver la bonne dans le tas, puis d'accéder à son jeu de règles cssRules, de trouver la bonne règle, et enfin de modifier cette règle. Par chance, tu n'as qu'une seule feuille dans ta page et une seule règle dans cette feuille.
    Ensuite, tu peux modifier le code CSS de la règle via sa propriété cssText, ou bien (mais je crois que c'est un ajout récent), par sa propriété style qui fonctionne comme avec les éléments HTML normaux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var laDivRule = document.styleSheets[0].cssRules[0];
     
    // avec cssText il faut réécrire toute la déclaration, c'est assez peu pratique
    laDivRule.cssText = ".laDiv { position: absolute; ... etc. }";
     
    // avec style c'est plus simple mais je ne garantis pas que ça marche, il faut faire des tests
    laDivRule.style.left = "-30px";
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <script language="javascript">
    function showLayer(sName) {
    	if (self.document.all)
    		self.document.all[sName].style.visibility = "visible"	//hidden
    	else
    		self.document.layers[sName].visibility = "show"; //hide
    }
    function hideLayer(sName) {
    	document.getElementById(sName).style.visibility="hidden";
    }
    </script>
    C'est bon de rire de temps en temps.
    Mais promis, je ne ferai pas de commentaire, notamment, je ne te conseillerai pas de mettre ton internet à jour.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    ça m'a rajeuni d'un coup là ...

    "all" y'avait longtemps ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    "all" y'avait longtemps ...
    j'avais plutôt percuté sur self.document.layers[sName].visibility = "show"; compte tenu de l'exclusivité NS4...mais comme a dis marcel marie
    Merci de vous en tenir à ce point.

  7. #7
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Je voulais aider mais je me suis arrêté à la remarque
    Merci de vous en tenir à ce point.
    C'est comme faire venir un médecin sur un champ de bataille jonché de blessés à l'agonie puis lui dire "Docteur, je me suis foulé la cheville, merci de vous en tenir à ce point."
    One Web to rule them all

  8. #8
    Membre actif
    Homme Profil pro
    retraité, ex chef de projets en informatique
    Inscrit en
    Juillet 2005
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité, ex chef de projets en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2005
    Messages : 602
    Points : 249
    Points
    249
    Par défaut
    Bonjour,
    Décidément il y en a toujours qui ont envie de montrer leur savoir !!!! Mais ça les fait rire, c'est toujours ça ....
    Je vous ai posé une question, répondez à ma question SVP ..... si vous savez évidemment (ce qui n'est pas certain) !!!!!!!!!!, puisque je vous l'ai demandé et surtout parce que le reste fonctionne très bien sur 4 navigateurs au moins et que le visiteur s'en fout royalement de la façon dont est écrit le script.

    Bon week end.
    Marcel Marie.

  9. #9
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    J'ai répondu de bonne foi, je n'ai (presque) pas fait de remarques, et visiblement tu n'as pas vu ma réponse. C'est un peu vexant
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  10. #10
    Membre actif
    Homme Profil pro
    retraité, ex chef de projets en informatique
    Inscrit en
    Juillet 2005
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité, ex chef de projets en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2005
    Messages : 602
    Points : 249
    Points
    249
    Par défaut
    Bonjour,
    Vous avez raison WATILIN. Je vous ai inclus dans le lot des "amis divergents" ou "divergeurs !!!" par négligence et parce que mon agacement a pris le pas sur la précision. Je puis vous assurer qu'à la lecture de votre réponse je me suis dit "Ah, enfin quelqu'un de sérieux qui prend la peine de dire et d'expliquer et de questionner pour préciser ma demande" BRAVO, je vous remercie et vous prie de m'excuser. Continuez à oeuvrer dans ce sens. Vous vous êtes bien rendu compte que mon message ne vous "visait" pas évidemment.

    Pour votre question : je veux seulement agir sur la <div > présente pour le moment mais pourquoi pas généraliser pour le futur !!.

    Je formule différemment ma question ci dessous pour les personnes de bonne volonté qui se sont laissées égarer par une certaine imprécision de ma part. Dès que j'ai la vraie bonne? solution, je ne manquerai pas de la transmettre ICI, en restant si possible dans les NORMES si chères aux amis .
    =========
    En fait voici ma question plus concise pour éviter de diverger.
    Votre réponse devrait tenir en UNE SEULE ligne du genre :

    xxxx.get ElementBy??.????.?????= zzzzz ;

    Dans l'exemple ci-dessous je peux écrire le <div> selon au moins les deux façons indiquées.
    Mais je voudrais que les paramètres de style soient conditionnés, par exemple par la taille écran du visiteur (que je sais obtenir).
    COMMENT FAIRE ? Je voudrais que ce soit en Javascript pur et non via Jquery ou autre.
    * comment changer les valeurs des propriétés du sélecteur, de la classe .ladiv ?
    * peut-on passer des variables d'un module Javascript, vers du HTML, vers le <div> ? car, de plus, mon module javascript n'est pas "joué" suite à un événement ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    .......
    <style type="text/css">
      .ladiv
      {
        position: absolute;
        top: 400px ;
        left: 600px ;
      }
    ......
    </head>
    <body> 
      <!-- <div id="texte" style="position: absolute; top: 400px; left: 600px; "> -->  
      <div id="texte" class="ladiv" >
    MERCI. BONNE JOURNÉE.
    Marcel Marie

  11. #11
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Au risque de te décevoir, car visiblement la réponse que je t'ai faite ne te conviennes pas non plus, avec ton code actuel tu n'obtiendra JAMAIS la dimension que tu souhaite tant que tu écriras l'appel à des éléments qui n'EXISTENT encore pas dans le DOM, cela reste un fondamental quoique tu en penses!

    Je prends donc un autre exemple issu de ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (document.body)
    {
        var larg = (document.body.clientWidth);
        var haut = (document.body.clientHeight);
    } 
    else
    {
        var larg = (window.innerWidth);
        var haut = (window.innerHeight);
    }
    larg et haut seront TOUJOURS initialisés par rapport à window car le BODY n'est pas encore existant!

    Votre réponse devrait tenir en UNE SEULE ligne du genre :
    xxxx.get ElementBy??.????.?????= zzzzz ;
    Je vais me permettre un autre approche...et pourquoi ne pas utiliser les media queries qui me semble tout à fait indiquer dans ton cas, mais ce n'est peut être pas la réponse que tu attendais.
    PS : Pardon de ne pas avoir répondu en une seule ligne.


    Décidément il y en a toujours qui ont envie de montrer leur savoir !!!!
    ben non justement on essaie, et c'est le but d'un forum, de te le faire partager.

  12. #12
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par marcel marie Voir le message
    En fait voici ma question plus concise pour éviter de diverger.
    Votre réponse devrait tenir en UNE SEULE ligne du genre :
    Je vois, vous faites les questions et aussi les réponses... Vous savez, c'est un forum d'entraide ici, pas un supermarché. Si vous n'acceptez pas qu'on vous aide, ou du moins pas dans le sens que vous souhaitez, alors je ne vois pas pourquoi on devrait s'en donner la peine. Bravo à Watilin et NoSmoking pour avoir su passer outre vos caprices, pour ma part je m'en vais diverger dans un endroit où l'on ne se fout pas royalement de la façon dont sont écrits les scripts.
    One Web to rule them all

  13. #13
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Je vais continuer à répondre car je pense que les gens qui demandent du Vanilla JS (du JavaScript pur « sans jQuery ou autre ») sont trop rares aujourd'hui.

    NoSmoking a pointé du doigt le véritable problème, que j'avais complètement zappé : ton script ne s'exécute tout simplement pas au bon moment. Les deux approches habituelles pour régler ça, c'est :
    1. Placer tes balises <script> à la fin de la page. Ça ne passe pas la validation mais c'est un compromis qu'on fait le choix accepter.
    2. Utiliser un gestionnaire d'évènement. Je te donne la syntaxe en mille :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      document.addEventListener("DOMContentLoaded", function() {
        // ... le code utile ici
      });
      Avec ceci tu peux placer ton code à l'endroit que tu veux tout en étant sûr qu'il s'exécutera seulement lorsque tout le DOM de la page aura été construit.


    Au fait je ne sais pas si tu es au courant, mais les navigateurs modernes fournissent un ensemble d'outils développement (qui s'ouvre généralement avec la touche F12) et qui propose tout un tas d'outils, notamment une interface console. Tu peux d'ores-et-déjà remplacer tous tes alert par des console.log qui ont l'avantage de sortir des informations sans suspendre l'exécution du script. Tu y prendras goût très vite, j'en suis sûr.

    Ensuite, je pense que tu abandonneras naturellement les techniques caduques (je pense notamment à document.write) qui ne sont tout simplement pas adaptées aux méthodes de développement actuelles.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  14. #14
    Membre actif
    Homme Profil pro
    retraité, ex chef de projets en informatique
    Inscrit en
    Juillet 2005
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité, ex chef de projets en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2005
    Messages : 602
    Points : 249
    Points
    249
    Par défaut
    Bonjour Watilin, je constate que vous n'êtes pas fâché ! je n'ai pas eu le temps de tester vos derniers conseils. Ah si, j'oubliais, je ne souhaite pas que les instructions qui devraient m'amener au résultat souhaité soient conditionnées à un événement, sauf peut-être à quelque chose comme ONLOAD au niveau BODY. ONLOAD ne convient pas car ça s'exécute dès le début du chargement et non à la fin.

    Bonjour à tous les autres également .... même à ceux qui sont offusqués d'une telle formule d'appel.
    Comme disent certain(e)s chez nous à la campagne, où, entre parenthèses, on n'a pas facilement les derniers livres sur les dernières versions de Javascript ou les dernières informations sur leurs compatibilés avec les navigateurs; j'en ai quand même QUATRE !!! et je ne suis pas "à la mode".
    Que disent certains? "Aide toi, le CIEL tête de rat" !!. Je continue donc de m'aider et je cherche ...

    J'ai suivi au mieux les instructions pour obtenir le petit programme suivant :
    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
    <html>
    <head>
    <title></title>
    <style type="text/css">
    #test
    {
       background-color: yellow;
       text-align: center;
       vertical-align: middle;
       overflow: hidden;
       position: absolute;
       left: 200px;
       top: 300px;
       width: 100px;
       height: 200px;
    }
    </style>
     
    </head>
    <body> 
     
    <script language="javascript">
       var bloc = document.getElementById("test");
       // on enregistre la nouvelle position
       x=100;
       y=100;
       // on place le bloc
       bloc.style.left = x + 'px';
       bloc.style.top = y + 'px';
       bloc.style.background-color = red;
     
    </script>   
    <div name="test" id="test" >Bonjour mon gars!! OK ?</div>
    </body>
    </html>
    TROP BEAU, TROP SIMPLE pour être VRAI car ça ne fonctionne pas ...
    Qu'est-ce que j'ai encore fait comme connerie ? faute de frappe? mauvais emplacement du CSS et du Javascript ? ...
    Et pourtant je confirme que l'article cité est très bien fait et bien expliqué/compréhensible pour un débutant JS comme moi.

    Réflexion générale sur JS. Il arrive que je ne comprenne pas toujours la logique des enchainements, via emplacements du CSS, du JS et de HTML. Voici un programme trouvé dans un livre édité en 2008 chez ENI.
    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 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Fonctions et évènements</title>
    <script language="javascript">
    function premierefonction() {
    var variable1="Voici ma première variable";
    }
    function afficher() {
    alert(variable1);
    }
    </script>
    </head>
    <body>
    <input type="button" name="Submit" value="Afficher" on-Click="afficher()">
    </body>
    </html>
    Je ne comprends pas par quel mystère est obtenue la variable "variable1 déclarée dans une autre fonction qui n'est même pas appelée. Il faut ajouter d'ailleurs que ça ne fonctionne pas non plus chez moi !!!! Y aurait-il un manque?, un paramètrage incorrect du navigateur ???? Il y a quand même des choses qui fonctionnent sur mon ordi, même en JS ......

    OK, on s'éloigne du sujet.
    Je vous souhaite une bonne journée. Cordialement.
    Marcel Marie

  15. #15
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Bonjour,

    tu n'as pas eu la curiosité de regarder dans ta console ? La réponse est dedans pourtant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReferenceError: invalid assignment left-hand side              fichier.html:30
    Le numéro de ligne est indiqué. À la ligne 30, tu as ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bloc.style.background-color = red;
    Je vois deux erreurs, mais commençons par celle qui est affichée. Ce n'est pas la plus explicite des erreurs. Quand ça parle de « left-hand side » ça signifie en gros qu'il y a un problème à gauche du signe égal. En l'occurence, il y a un moins entre background et color ; c'est comme si l'interpréteur JavaScript voyait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bloc.style.background - color = red;
    Le vrai problème c'est que le même symbole - sert de trait d'union en CSS et de soustraction en JavaScript. Pour remédier à ça, les propriétés CSS qui ont des noms composés subissent une transformation quand elles passent de CSS à JS : le moins est retiré, et la lettre qui suit est mise en majuscule.
    background-color devient backgroundColor.

    La seconde erreur n'est pas affichée, parce que l'interpréteur, laissé en berne après la première erreur, a dû s'arrêter et n'est pas arrivé jusque-là.
    Cette seconde erreur c'est les guillemets manquants autour de red. JS va croire que c'est un nom de variable et comme a priori elle n'existe pas, il va te sortir une erreur de ce genre :
    Code erreur : Sélectionner tout - Visualiser dans une fenêtre à part
    ReferenceError: red is not defined

    Si tu ne vois pas les erreurs, il est très difficile de développer. Suis mon conseil, utilise la console


    Ah oui au fait, il y a une troisième erreur. Toujours la même : ton script s'exécute trop tôt, il ne peut pas trouver la <div> car celle-ci apparaît après. La solution je te l'ai donnée : soit tu places tous tes scripts à la fin de la page, juste avant </body>, soit tu utilises "DOMContentLoaded". J'ai bien lu ce que tu as écrit à propos de onload, mais crois-moi, il n'y a aucune bonne raison de ne pas utiliser ces évènements.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour marcel marie !
    Ca faisait longtemps, et je reconnais bien là ton style inimitable d'alchimiste, qui tente de plier la matière par la force de sa volonté !
    Ou qui voudrait pouvoir écouter Deezer sur son poste à galène !!

    Citation Envoyé par marcel marie Voir le message
    [................]OK, on s'éloigne du sujet....
    Si en plus tu trolles toi-même tes propres discussions, je suis fan !

    Je n'ai rien de plus à dire que les "autres", mais j'ai répondu pour pouvoir suivre la discussion
    Une petite question me taraude néanmoins :
    Ah si, j'oubliais, je ne souhaite pas que les instructions qui devraient m'amener au résultat souhaité soient conditionnées à un événement
    Dans ce cas, pourquoi ne pas mettre simplement le style CSS que tu veux appliquer... dans des balises <style>...</style> ?
    Et hop ! Le tour et joué !
    Sans les mains ! (et sans JavaScript)

    Ce qui n'est pas aussi saugrenu qu'il y parait, et rejoint NoSmoking :
    Citation Envoyé par NoSmoking Voir le message
    ...et pourquoi ne pas utiliser les media queries qui me semble tout à fait indiquer dans ton cas, ...
    J'attends avec impatience ta réaction...
    Dernière modification par Invité ; 02/03/2015 à 08h10.

  17. #17
    Membre actif
    Homme Profil pro
    retraité, ex chef de projets en informatique
    Inscrit en
    Juillet 2005
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité, ex chef de projets en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2005
    Messages : 602
    Points : 249
    Points
    249
    Par défaut
    Bonjour,
    Eh bien voilà, ça marche, ce n'est quand même pas compliqué !!! Vous auriez quand même pu le dire plus vite, j'aurais gagné une semaine et conservé quelques cheveux de plus !!!!!!!!! Evidemment je "rigole" ... jaune .... MERCI MERCI et MERCI ...

    Pour Watilin :
    * j'aurais effectivement du mieux lire vos messages, sans attendre ... et surtout le positionnement du script. Comme je l'ai dit, la logique du Javascript ne veut absolument pas rentrer dans ma tête. A ce propos, avez-vous une explication (brève) à la question annexe de mon dernier message?
    * je ne sais pas comment exactement écrire le "bloc.style.background-color = red; ". J'ai essayé diverses combinaisons mais je ne suis pas tombé sur la bonne ... Ce n'est pas très grave. Seuls les positionnements du bloc sont essentiels pour moi.
    * encore une remarque d'un débutant ! et là je me cache sous la table, j'ai honte ... je ne sais pas ce que ça veut dire "la curiosité de regarder dans ta console ". Regarder où? Comment ? Là je crois que je vais encore être moins bête ce soir, mais à force d'être "moins bête" j'ai tendance à m'inquiéter .
    * je vais poursuivre mon apprentissage en JS et avec toutes vos bonnes idées, il y a encore du travail pour les dernières longues soirées d'hiver.
    * BRAVO, continuez à aider de cette façon, je vous souhaite de trouver rapidement du travail (j'ai cru comprendre que vous étiez en recherche d'emploi ?)
    * encore MERCI pour vos réponses et votre comportement "exemplaire" sur un forum. Preuve que vous l'êtes : "FORT HOMME" ....

    Pour jreaux62:
    Ouf enfin quelqu'un qui me comprends !!!
    Je ne savais pas que "trolle" était dans le dictionnaire. Merci.
    AH, bonne question! si les valeurs mises dans le bloc JS ne sont pas mises dans le CSS c'est que j'ai raccourci le script pour éviter, autant que possible, mais ce n'est pas gagné, les remarques "hors-sujet" de certains intervenants. En fait je souhaite qu'un bloc <div> placé à droite de l'écran soit ajusté pour tout le monde quelle que soit la taille de son écran. J'ai donc un petit calcul à effectuer avant de positionner en x et y ce bloc <div>.
    * à cette heure-ci, ce jour : 9h39 le 2/3, je ne sais pas ce que sont les media-queries ?
    * vous êtes arrivé trop tard dans la discussion pour pouvoir en apprécier toutes les subtilités. Mais ne désespérez pas, il y aura sûrement et, malheureusement, d'autres discussions.

    Encore MERCI , je suis ce jour très généreux avec ce mot et ça fait du bien de l'exprimer; ça compense, d'une certaine façon, mes reproches pas toujours "sympathiques", mais non moins fondés !!!!
    Bonne journée. Cordialement.

    Marcel Marie

  18. #18
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    mes reproches pas toujours "sympathiques", mais non moins fondés !!!!
    Nos boutades au vu de ton code ne le sont pas moins
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  19. #19
    Membre actif
    Homme Profil pro
    retraité, ex chef de projets en informatique
    Inscrit en
    Juillet 2005
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité, ex chef de projets en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2005
    Messages : 602
    Points : 249
    Points
    249
    Par défaut
    Le dernier point pour que tout soit PARFAIT, c'est l'écriture de la ligne suivante :

    bloc.style.backgroundColor = "red";

    Bonne journée.
    Marcel Marie

  20. #20
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    Bonjour,

    Je ne sais pas si ton problème d'exécution de script est bien résolu mais j'ai trouvé quelque chose qui semble répondre assez bien à la problématique ici puisqu'on reste comme tu le demandes sur du javascript pur :
    Avec le gestionnaire d'événements traditionnel, on met à la fin du fichier javascript cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.onload = fonction_du_fichier;
    C'est propre, c'est clean, c'est cool
    L'avantage est que cela te permettra de placer tes balises <script> où bon te semblera dans ta page, sans réfléchir à un quelconque ordre d'exécution.
    Chen norris
    C/C++, C#, Java, PHP & SQL coder
    Web developer

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Modifier les valeurs des champs en utilisant pentaho
    Par nandy.c dans le forum kettle/PDI
    Réponses: 2
    Dernier message: 12/03/2012, 17h04
  2. Modifier la valeur des propriétés
    Par philnext dans le forum Langage
    Réponses: 4
    Dernier message: 26/05/2010, 12h53
  3. Réponses: 5
    Dernier message: 06/08/2008, 16h24
  4. rafraichir les valeurs des propriétés inserées
    Par akkeri dans le forum VBA Word
    Réponses: 1
    Dernier message: 14/12/2007, 23h58
  5. Lire un fichier Excel pour modifier les valeurs des cellules
    Par Paloma dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/10/2006, 15h13

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