11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Mes excuses si je ne suis pas dans la bonne rubrique mais je ne sais pas dans quelle direction chercher. Peut être aurais-je du aller dans CSS etc. ou bien DOM etc ?

C'est assez compliqué à expliquer. En résumé, IE6 n'aime pas les poupées russes.
IE6 seulement car ça marche nickel sous Firefox, IE7, et Opera.

Le problème: l'image finale contenue dans un div appelé à l'aide d'un tableau javascript ne s'affiche pas.

Voici les détails.
J'ai une image à zones réactives (map) :

<img src="photos/img_fixes/tours.jpg" border="0" usemap="#Map" style="top:195px; position:absolute" />
			<map name="Map" id="Map">
 			<area shape="poly" coords="164,10,184,13,153,137,141,132" href="javascript [decu]void);" onclick="showdiv('troncon','0')" />
			<area shape="poly" coords="319,162,332,166,242,280,233,271" href="javascript [decu]void);" onclick="showdiv('troncon','1')" />
			<area shape="poly" coords="232,276,239,286,250,401,235,398" href="javascript [decu]void);" onclick="showdiv('troncon','2')" />
			<area shape="poly" coords="235,401,244,406,163,600,151,590" href="javascript [decu]void);" onclick="showdiv('troncon','3')" />
			</map>


Le clic sur une zone appelle un javascript "showdiv" qui affiche un div en transmettant une variable qui est un numéro (0 à 3) :

<script language="javascript">
function showdiv(D,I) {	
  if (document.all) {  
  document.all[D].style.display="block";
  document.all[D].innerHTML = tabcontenu[I];
  }
  else if (document.getElementById) {  
  document.getElementById(D).style.display="block";
  document.getElementById(D).innerHTML = tabcontenu[I];
  }
}
  
function hiddediv(D) {
  if (document.all) { document.all[D].style.display="none";}
  else if  (document.getElementById) { document.getElementById(D).style.display="none";}
}
</script>


Cette variable identifie l'indice d'un tableau javascript qui contient le contenu à afficher dans le div final :

<script language="javascript">
var tabcontenu = new Array(16);
tabcontenu[0] = "<div id=\"fermer\" class=\"fermer\" style=\"left:680px;\"><img src=\"photos/img_fixes/croix_fermer.png\" onclick=\"hiddediv('troncon')\" /></div><img src=\"photos/img_fixes/tours.jpg\" /> ";
tabcontenu[1] = "<div id=\"fermer\" class=\"fermer\" style=\"left:680px;\"><img src=\"photos/img_fixes/croix_fermer.png\" onclick=\"hiddediv('troncon')\" /></div><img src=\"photos/img_fixes/bordeaux.jpg\" /> 
tabcontenu[2] = etc etc ....
</script>

La div "fermer" est là simplement pour afficher la petite croix blanche sur fond rouge (même que c'est moi qui l'ai faite à la main et aux crayons de couleurs;) et qu'en cliquant dessus ça ferme la div.

Et enfin le div final qui affiche le contenu voulu :

<div id="troncon" class="popup"></div>


Le CSS qui va avec :

.popup {
	top:300px;
	left:20px;
	width:700px;
	height:auto;
	border-top:#ffffff solid 2px;
	border-left:#ffffff solid 2px;
	border-right:#cccccc solid 3px;
	border-bottom:#cccccc solid 3px;
	background-color:#fedfa9;
	position: absolute;
	padding: 10px;
	z-index:50;
	display:none;
	}


Et bien c'est l'image finale, par exemple "tours.jpg" qui ne s'affiche pas. Le div "troncon" apparait, l'emplacement de l'image aussi, mais rien à l'intérieur. Ou plutôt de façon très aléatoire, ça marche environ 1 foi sur 10. En plus des fois c'est la petite croix de la div "fermer" qui refuse de s'afficher.

Il y a forcément quelque chose que je ne sais pas au sujet de IE6 et de la compatibilité (en fait je ne sais pas grand chose, je suis loin d'être un kador). J'aimerai juste savoir si je peux espérer une solution ou si je dois complètement modifier le graphisme et la structure.

Si quelqu'un à une idée ..... je serai infiniment reconnaissante à toute personne voulant bien s'intéresser à mon soucis.
Bonjour,

Page en ligne?
Ce serait tout de même plus simple pour constater le problème, et ça donne aussi accès à tout le code source concerné. Smiley cligne
Bonjour,

Effectivement ça ne marche pas dans IE6: la fausse pop-up s'ouvre, mais le contenu de l'iframe qu'elle contient n'est pas chargé.

Est-ce que tu as fait les vérifications suivantes:
- est-ce que l'iframe se charge correctement si tu la places seule dans une page de test?
- est-ce que l'iframe se charge correctement si tu la places dans le contenu de ta page, ou encore si tu écris «en dur» (HTML statique) tout le code qui est censé être généré?

Si la réponse est oui dans les deux cas, alors le problème vient probablement de la partie Javascript (et auquel cas il faudra déplacer ce sujet dans le salon ad hoc).
Ami du jour, bonjour,

Oui j'ai fait des tests dans tous les sens, mais dans la panique et l'énervement ce qui fait que je ne sais plus trop si ça correspond exactement à ces suggestions. Donc je vais reprendre calmement ce que tu me dis, et je donne le résultat d'ici la fin de la journée.
Résultat des courses : oui et oui.
Ce n'est pas l'iframe qui est en cause car ça fait pareil avec une bête image.
Ca fonctionne bien si je met l'image "en dur" dans le div, c'est à dire sans passer par le tableau javascript.

J'ai revu mon code dans tous les sens et je ne comprend pas ce qui cloche.

Bon, ben comment fait-on pour déplacer le post à la bonne rubrique ?

Merci Florent pour le coup de main.
Bonjour,

Personne ne se sent inspiré ? Excusez moi d'insister mais je suis du genre à penser que l'humain sera toujours plus fort que des lignes de codes (têtue quoi).
Au passage merci quand même à ceux qui on pris le temps de lire.
Houhou ! Ya quelqu'un ? Personne pour m'aider ?

J'ai tenté pleins de trucs entre temps et c'est sur que ça vient du tableau Javascript.

Je viens de trouver une piste mais je ne sais pas l'exploiter. Quand l'image ne s'affiche pas, si je fais clic de droite > Afficher l'image, elle arrive. Mais ça veut dire quoi ? Que fait IE6 exactement par cette commande ?
c'est peut être un bug de IE6 avec la fonction InnerHTML, en tout cas, ca marche sur IE7.

As tu essayé de passer par le DOM ?
Bonjour et merci de me répondre,

Et ça je sais que ça marche sur IE7 mais yen a encore pour quelques années ( bon allez, quelques mois ?) avant que tout le monde soient avec IE7.

Euh.... je comprend pas bien la question, passer par le DOM ? Je croyais que c'était déjà ce que je faisais un peu avec la fonction showdiv et hidediv.
STOP ! J'ai trouvé !
Complètement par hasard. J'ai refait au propre mon image map avec Dreamweaver parce que l'autre était un brouillon temporaire. Et pour le lien Dreamweaver met un href="#" par défaut quand on lui précise pas l'adresse.

J'ai pas fait gaffe, j'ai testé comme ça et ça a marché. GLUPS ?
Alors j'ai remis mon href="javascript Smiley decu void);" que j'ai l'habitude d'utiliser et là le pb est réapparu.

Conclusion: ben j'en sais rien. IE6 se mélanger les pinceaux dans les différents javascript ? Le principal pour moi c'est que j'ai pas besoin de tout refaire.

Merci à tous.