Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JS] Aucun résultat sur IE7 mais bon pour FF3

Il n'accepte pas innerHTML ?

Sujet résolu
    24 décembre 2008 à 13:58:16

    Bonjour,

    Je réalise un album photo, et j'ai vérifié que trop tard la cohérence entre navigateurs, car, au moment où ça marchait enfin sur Firefox 3, je me suis décidé d'aller faire un tour sur Internet Explorer 7 ; et là, grande déception, aucune des fonctionnalités du code ne s'affiche :'(

    Voici un petit sommaire d'explication du code :
    - la fonction ini() qui affiche l'image du dernier article écrit, et qui récolte les infos de tous les articles d'une certain rubrique. De plus, elle return ces données
    - la fonction change(cle, info) qui s'active lorsque l'on clique sur une image en bas (une sorte de raccourci). Elle change les infos contenus dans le div album (le plus grand)
    - la fonction display, qui propose d'autres "séries" de raccourcis
    - la structure de l'album en HTML
    - l'activation de la première fonction (je ne la mets pas plus tôt car elle modifie les div juste au-dessus)

    Voici un rendu pour être sur que vous compreniez (bon j'en fais peut-être un peu trop mais j'ai besoin d'une aide !) :
    Image utilisateur

    Enfin, voici mon code :
    <!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="fr">
    <head>
    <link type="text/css" rel="stylesheet" href="/plugins/album/album.css" >
    <title>Album photo</title>
    <script type="text/javascript" language="javascript">
    	var serie = 1;	//défini la série au début
    function ini() 
    {
    	//ligne à changer pour changer de rubrique
    	image = new Array; //on créé l'array qui contient les img du diapo
    	titre = new Array ; //idem pour les titres et chapos et id
    	chapo = new Array;
    	id = new Array;
    
    	//<BOUCLE_album (ARTICLES) {id_rubrique = 16} {par date}{inverse}>
    	image.push('#LOGO_ARTICLE_RUBRIQUE');
    	titre.push('[(#TITRE|guillemets)]');
    	chapo.push('[(#CHAPO|guillemets)]');
    	id.push('#ID_ARTICLE');
    	
    	var total = '#TOTAL_BOUCLE';
    	//</BOUCLE_album>
    	
    	document.getElementById('titre').innerHTML = titre[0];
    	document.getElementById('chapo').innerHTML = chapo[0];
    	document.getElementById('suite').href = '/?article'+id[0];
    	
    	//document.getElementById('photo').innerHTML = image[0];
    	//if(image[0].height>image[0].width)
    	//{
    		//document.getElementById('photo').style.height = 380+"px";
    	//}
    	//else
    	//{
    		//document.getElementById('photo').style.width = 200+"px";
    	//}
    
    
    	
    	info = new Array (image, titre, chapo, id, total);
    
    	var i = 1;
    	while(i<total)
    	{
    		document.getElementById('logo'+i).innerHTML = "<a href=\"#\" onclick=\"change('"+i+"', info);\">"+image[i]+"</a>"; 
    		i++;
    	}
    
    	return info;
    }
    
    function change(cle, info)
    {
    	var serie = Math.ceil(cle/5);//on connait sa serie
    	var last_serie = Math.ceil(info[4]/5);//on connait sa serie du dernier
    	var place = cle%5; //on sait s'il est premier, second etc. de sa serie
    	
    	//on change les infos de l'album
    	document.getElementById('photo').innerHTML = info[0][cle];
    	document.getElementById('titre').innerHTML = info[1][cle];
    	document.getElementById('chapo').innerHTML = info[2][cle];
    	document.getElementById('suite').href = '/?article'+info[3][cle];
    	
    	//on change les raccourcis d'en bas
    	if(last_serie == serie) 
    	{
    		var last = info[4]%5-1;
    	}
    	else { var last = serie*5}
    	var i=serie*5-4;
    	var j=1
    	while(i<=last)
    	{
    		document.getElementById('logo'+j).innerHTML = "<a href=\"#\" onclick=\"change('"+i+"', info);\">"+info[0][i]+"</a>"; 
    		i++;
    		j++;
    	}
    	return(serie);
    }
    
    function display(serie, info)
    {
    	if(serie<0) { serie = 0}
    	var last_serie = Math.ceil(info[4]/5);//on connait sa serie du dernier
    	if(last_serie == serie) 
    	{
    		var last = info[4]%5-1;
    	}
    	else { var last = serie*5}
    	last = serie*5;
    	var i=serie*5-4;
    	var j=1
    	while(i<=last)
    	{
    		document.getElementById('logo'+j).innerHTML = "<a href=\"#\" onclick=\"change('"+i+"', info);\">"+info[0][i]+"</a>"; 
    		i++;
    		j++;
    	}
    }
    </script>
    
    </head>
    <body>
    
    <div id="album">
    	<div id="photo">
    
    	</div>
    		<div id="titre">
    		
    		</div>
    		<div id="chapo">
    		
    		</div>
    		<h6><a href="#" title="Accéder à l'article" id="suite">Lire la suite...</a></h6>
    
    </div>
    
    <div id="autres">
    <img src="/plugins/album/prec.png" alt="Image précédente" class="left" id="prec" onclick="display(serie--, info)"/>
    	<div class="logo" id="logo1">
    		<img src="http://www.dev.localeo.com/IMG/rubon6.gif" alt="Image par défaut" />
    	</div>
    	<div class="logo" id="logo2">
    		<img src="http://www.dev.localeo.com/IMG/rubon6.gif" alt="Image par défaut" />
    	</div>
    	<div class="logo" id="logo3">
    		<img src="http://www.dev.localeo.com/IMG/rubon6.gif" alt="Image par défaut" />
    	</div>
    	<div class="logo" id="logo4">
    		<img src="http://www.dev.localeo.com/IMG/rubon6.gif" alt="Image par défaut" />
    	</div>
    	<div class="logo" id="logo5">
    		<img src="http://www.dev.localeo.com/IMG/rubon6.gif" alt="Image par défaut" /> 
    	</div>
    <img src="/plugins/album/suiv.png" alt="Image précédente" id="suiv" onclick="display(serie++, info)" />
    </div>
    
    <script type="text/javascript" language="javascript">
    ini();
    </script>
    
    </body>
    </html>
    


    Merci beaucoup de votre aide !
    • Partager sur Facebook
    • Partager sur Twitter
      24 décembre 2008 à 15:11:25

      Des variables non définies traînent :
      var serie = 1;
      IE est très sensible aux variables qui ne sont pas définies quelque part.
      • Partager sur Facebook
      • Partager sur Twitter
        24 décembre 2008 à 15:15:35

        Je mets à jour un code qui n'a plus de variables non définies, mais qui ne marche comme même pas sur IE
        • Partager sur Facebook
        • Partager sur Twitter
          24 décembre 2008 à 16:00:51

          -__-
          image = new Array; //on créé l'array qui contient les img du diapo
          titre = new Array ; //idem pour les titres et chapos et id
          chapo = new Array;
          id = new Array;
          C'est défini où ça alors ?
          var image = new Array; //on créé l'array qui contient les img du diapo
          var titre = new Array ; //idem pour les titres et chapos et id
          var chapo = new Array;
          var id = new Array;
          Et tu dois en avoir encore d'autre qui traînent ;) .
          • Partager sur Facebook
          • Partager sur Twitter
            24 décembre 2008 à 18:25:04

            Oups, je suis bête : les arrays sont aussi des variables :-°

            Merci ça marche !
            • Partager sur Facebook
            • Partager sur Twitter
              28 décembre 2008 à 17:02:56

              Pense à passer le sujet en résolu alors. :)
              • Partager sur Facebook
              • Partager sur Twitter
                28 décembre 2008 à 17:08:34

                Une question me vient à l'esprit en voyant ça : les variables non-définies ne sont-elle pas censées être des variables globales :-° ?
                • Partager sur Facebook
                • Partager sur Twitter
                  28 décembre 2008 à 17:18:55

                  Citation : Nesquik69

                  Une question me vient à l'esprit en voyant ça : les variables non-définies ne sont-elle pas censées être des variables globales :-° ?


                  C'est à dire ?
                  Les variables non-définis sont des variables qui n'ont pas été défini quelque part par le mot clé var (a l'exception des propriétés dans les objets).
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 décembre 2008 à 17:23:34

                    En clair elles ne sont pas correctes ?
                    Merde, j'avais toujours pensé que ne pas mettre l'instruction var permettait de faire des variables globales, honte sur moi :'( .
                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 décembre 2008 à 19:26:16

                      Elle ne sont juste pas défini quelque part.
                      En javascript, on doit déclarer les variables qu'on utilise, sinon le compilateur n'arriverai pas à compiler.
                      Le mot clé var permet de déclarer une variable, c'est indépendant de sa portée.
                      La portée d'une variable est défini suivant l'endroit ou elle est défini.
                      Si tu la défini comme ça, elle est globale, dans une fonction, elle est locale à cette fonction, dans une boucle, localle à cette boucle, etc...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 décembre 2008 à 19:31:56

                        Comme quoi, même en programmant depuis un bon moment, y'a toujours des choses à apprendre même au niveau des bases :D !
                        • Partager sur Facebook
                        • Partager sur Twitter
                          31 décembre 2008 à 9:35:40

                          Normalement, on peut effectivement déclarer des variables sans "var", ce qui fait considérer au navigateur qu'elles sont globales, mais ce n'est pas "rigoureur" (apparement, ça n'est pas reconnu par IE, j'étais pas au courant).
                          Il faut d'abord les déclarer dans le contexte global pour que ce soit rigoureux (et pour faire plaisir à M$, apparrement :p ) :
                          var globale = 'Test';
                          (function() {
                              alert(globale);
                              globale = 'Toast';
                          })(); // -> Test
                          alert(globale); // -> Toast
                          //Ou encore : 
                          var glob = null; //Me semble que var glob; seul fonctionne, mais pas sur
                          (function() { glob = 4; })();
                          alert(glob); // -> 4
                          

                          Sinon, pour déclarer une variable globale, le moyen le plus simple c'est window.nom = valeur; (ou window['nom'] = valeur; ), puisque les variables globales sont en fait les propriétés et méthodes de l'objet window.
                          Ainsi, ceci est "correct" :
                          function test() {
                              window.toto = 'tata';
                              alert(toto);
                          }
                          test(); // -> tata
                          alert(toto); // -> tata
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                            3 janvier 2009 à 16:05:58

                            Hum... Je ne comprends pas ton dernier exemple.

                            Puisque window.nom = valeur; défini une variable globale, comment se fait-il que alert(toto); affiche "tata" étant donné que toto est une variable locale (issue d'une fonction, et n'est pas en return)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              3 janvier 2009 à 17:37:00

                              Euh, tata n'est pas une variable, hein, c'est juste une chaine de caractère ('tata') :D
                              • Partager sur Facebook
                              • Partager sur Twitter
                                3 janvier 2009 à 18:00:39

                                Oups j'ai fais une erreur, je voulais parler de la variable toto (je corrige mon poste pour que ce soit plus claire)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  3 janvier 2009 à 18:48:23

                                  lol

                                  cbasile06 brule, le reste c'est un peu tiède.


                                  dans l'ordre :
                                  @pl-94 : ne pas utiliser variable = new Array;. utilise plutôt variable = [];. Moins d'erreurs possibles et c'est plus joli.

                                  @pl-94: comme même. utilise plutôt quand même. Plus français.

                                  @Nesquik69 : les variables indéfinies sont… indéfinies. Quand tu assigne une valeur à une variable non définie, oui c'est une variable globale "automagiquement".

                                  @Timot : perdu. Une variable indéfinie est une variable qui a pour valeur "undefined". rien a voir avec "var".

                                  @Nesquik69 : tu as bien raison, mais c'est mal les variables globales.

                                  @Timot : presque pas perdu. Le compilateur javascript il compile tout ce que tu veux (si y'a pas d'erreur de syntaxe) C'est uniquement à l'execution que ça fait de la merde. Tu peux pas faire de variable locale à une boucle. La seule structure qui permet de faire des variables locale sont les fonctions (qui sont des objets au final) en utilisant "var" comme tu dis. Pour un objet (ça => {}) c'est une propriété et sépapareil.

                                  @cbasile06 : meu si, les variables globales sans "var" c'est vieux comme le compilateur javascript. T'as pas encore tout pigé des closures, ça viendra. Sinon moi je dirais que le meilleur moyen de déclarer des variables globales, c'est de pas le faire… mais bon :p
                                  On dit que c'est l'objet window qui est le contexte global. Ça veut dire a peut pres pareil, mais t'as vachement plus de succès avec les filles, croit moi.

                                  @pl-94 : on a dit que c'est parce que l'objet window est le context global. Écrire window.toto = "machin"; et toto = "machin" c'est exactement pareil.




                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    3 janvier 2009 à 19:00:59

                                    Donc, si je comprends bien, si on dit qu'une variable est globale, même dans une fonction, elle reste globale ? Donc dans ce cas là, pour une fonction, c'est l'équivalence d'un return ?

                                    Ca marche aussi dans les autres langages de programmation ?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      3 janvier 2009 à 19:40:45

                                      Citation : nod_

                                      @Nesquik69 : tu as bien raison, mais c'est mal les variables globales.


                                      Je suis bien d'accord, je n'en ai utilisé que pour mes tests jusqu'à présent, rien de plus ^^ .
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        3 janvier 2009 à 20:18:43

                                        @nod_ :
                                        "Meu si les variables globales c'est vieux comme le compilateur javascript" -> j'ai pas compris.
                                        Si c'est pour "ça n'est pas reconnu par IE", c'est ce qu'il m'avait semblé comprendre du début de la discussion, il est vrai qu'étant sous linux, j'ai pas IE (enfin, si, via wine, mais j'ai des problèmes avec en ce moment :D ). Il est vrai aussi qu'en relisant les premiers messages, je n'ai pas compris la même chose cette fois-ci :-°
                                        Le but des closures, c'était juste de la flemme pour pas écrire
                                        function test() {...}
                                        test();
                                        

                                        Elle servent simplement à être dans un contexte local pour montrer que la variable globale peut y être modifiée :D
                                        Et pis, "l'objet window est le contexte global", c'est peut-être plus joli, mais moins compréhensible en général :-°
                                        P.S. : Je suis d'accord sur le point que "le meilleur moyen de faire des variables globales c'est de ne pas en faire", mais parfois, c'est nécéssaire; par exemple, si tu fait un script d'infobulle, avec plusieurs fonctions bien entendu, faut bien que tu puisse accéder à l'élément qui sert d'infobulle via une variable, ou encore, si tu veux garder en mémoire un objet RegExp pour le réutiliser souvent - enfin, dans ces cas-là, autant faire un objet qui contient tout ça, c'est plus vraiment une variable globale :D
                                        @pl-94 : oui, le principe d'une variable globale, c'est qu'on peut y accéder depuis n'importe où.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          3 janvier 2009 à 20:34:47

                                          Citation : cbasile06

                                          Elle servent simplement à être dans un contexte local pour montrer que la variable globale peut y être modifiée :D
                                          Et pis, "l'objet window est le contexte global", c'est peut-être plus joli, mais moins compréhensible en général :-°
                                          P.S. : Je suis d'accord sur le point que "le meilleur moyen de faire des variables globales c'est de ne pas en faire", mais parfois, c'est nécéssaire; par exemple, si tu fait un script d'infobulle, avec plusieurs fonctions bien entendu, faut bien que tu puisse accéder à l'élément qui sert d'infobulle via une variable, ou encore, si tu veux garder en mémoire un objet RegExp pour le réutiliser souvent - enfin, dans ces cas-là, autant faire un objet qui contient tout ça, c'est plus vraiment une variable globale :D



                                          Justement, tu peux ruser avec les closures et ne rien introduire de global tout en utilisant tout le bordel de fonction/variables temporaires possible. Je t'assure, j'le fait :D
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          [JS] Aucun résultat sur IE7 mais bon pour FF3

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown