Probleme affichage infobulle calendrier avec IE mais pas avec firefox
ishanshade
Messages postés3Date d'inscriptionlundi 6 février 2006StatutMembreDernière intervention14 mars 2006
-
12 mars 2006 à 15:07
ishanshade
Messages postés3Date d'inscriptionlundi 6 février 2006StatutMembreDernière intervention14 mars 2006
-
14 mars 2006 à 19:53
Bonjour à tous
Je fais un site internet pour la FAC sur un sujet bien précis : les mangas
Pour ce site,j'ai voulu incorporer un calendrier avec infobulle apparaissant lorsque le curseur passe sur la data contenant un évènement.
J'ai donc chopé un petit module sur le net que j'ai très vite installé.
Voila ce que ca donne [url= http://dbzishan40.free.fr/v1/. Pour les utilisateurs de Firefox, ils verront le calendrier marcher parfaitement. Pour ceux qui utilisent IE, pas d'infobulles ! Voici l'erreur que donne IE :
'document.all.infobulle.style' a la valeur Null ou n'est pas un objet. (aux lignes 30 et 60, d'apres IE en gras ici)
var ie = (document.all)? true:false;
var ns4 = (document.layers)? true:false;
var ns6 = (document.getElementById)? true:false;
var IB=new Object;
var posX=0;
var posY=0;
var xOffset=20;
var yOffset=20;
function AffBulle(titre, texte, w, color1, color2)
{
//contenu="
"+titre+"
";IB.ColContourIB.ColFond
//IB.ColContour
contenu=""+titre+", ----
<table style='width:100%; background: white;' cellpadding='3' cellspacing='0'>----, "+texte+"</td>
</td></tr></table> ";
var finalPosX=posX-xOffset;
if (finalPosX<0) finalPosX=0;
if (ns4)
{
document.layers["infobulle"].document.write(contenu);
document.layers["infobulle"].document.close();
document.layers["infobulle"].top=posY+yOffset+"px";
document.layers["infobulle"].left=finalPosX+"px";
document.layers["infobulle"].visibility="show";
}
if (ie)
{
infobulle.innerHTML=contenu;
document.all["infobulle"].style.top=posY+yOffset+"px";
document.all["infobulle"].style.left=finalPosX+"px";
document.all["infobulle"].style.visibility ="visible";
}
else if (ns6)
{
document.getElementById("infobulle").innerHTML= contenu;
document.getElementById("infobulle").style.top=posY+yOffset+"px";
document.getElementById("infobulle").style.left=finalPosX+"px";
document.getElementById("infobulle").style.visibility="visible";
}
}
function getMousePos(e)
{
if (ie)
{
posX=event.x+document.documentElement.scrollLeft;
posY=event.y+document.documentElement.scrollTop;
}
else
{
posX=e.pageX;
posY=e.pageY;
}
}
function HideBulle()
{
if (ns4) {document.layers["infobulle"].visibility="hide";}
if (ie) {document.all["infobulle"].style.visibility="hidden";}
else if (ns6){document.getElementById("infobulle").style.visibility="hidden";}
}
function InitBulle(ColFond, ColContour, NbPixel)
{
IB.ColFond =ColFond;IB.ColContour=ColContour;IB.NbPixel=NbPixel;
if (ns4)
{
document.write("<layer name='infobulle' top='0' left='0' visibility='hide'></layer>");
window.captureEvents(Event.MOUSEMOVE);window.onMouseMove=getMousePos;
}
if (ie)
{
document.write("
");
document.onmousemove=getMousePos;
}
//modif CL 09/2001 - NS6 : celui-ci ne supporte plus document.layers mais document.getElementById
else if (ns6)
{
document.write("
");
document.onmousemove=getMousePos;
}
}
Pourtant, le plus curieux, c'est que sur la page [url=http://dbzishan40.free.fr/v1/test/ (page appellée sur ma page v1/index.php grâce à la fonction include) avec Firefox ou IE, tout marche parfaitement.
Quelqu'un peut-il m'aider ?
Merci d'avance
A voir également:
Probleme affichage infobulle calendrier avec IE mais pas avec firefox
cs_roro06
Messages postés732Date d'inscriptionjeudi 2 janvier 2003StatutMembreDernière intervention29 octobre 2007 13 mars 2006 à 10:33
Bonjour
Sans trop trop fouiller dans ton code, Je te donnerais simplement 2 conseils :
1 - " document.getElementById("infobulle").innerHTML=contenu;
document.getElementById("infobulle").style.top=posY+yOffset+"px";
document.getElementById("infobulle").style.left=finalPosX+"px";
document.getElementById("infobulle").style.visibility="visible"; IE est capable d'interpreter cela. Donc : Inutile de tester le navigateur (distingo entre IE et NS6)
En fait, j'ai tendance à déconseiller l'utilisation de l'objet all.D'ailleurs, je ne l'ai jamais utilisé.
2 - NS4 est encore utilisé quelquepart dans l'Univers ? J'ose croire qu'il a été éradiqué du Cosmos et qu'on en entendra plus parler .
En fait, ici, tu n'as à faire une détection de navigateur uniquement pour ta fonction getMousePos() qui doit pouvoir se simplifier en :
function getMousePos(e)
{
posX=(document.all)?event.x+document.documentElement.scrollLeft : e.pageX;
posY=(document.all)?event.y+document.documentElement.scrollTop : e.pageY;
}
J'insiste, l'utilisation de l'objet all devrait être interdite (j'ai déjà du le dire, ça) sauf peut-etre pour de l'Intranet, quand à ns4, tu t'embete peut-etre pour pas grand chose. Un browser, c'est téléchargeable gratuitement.
Mais c'est un avis personnel.
ishanshade
Messages postés3Date d'inscriptionlundi 6 février 2006StatutMembreDernière intervention14 mars 2006 14 mars 2006 à 19:51
Merci pour ta proposition, mais en fait la fonction getmousepos n'a pas l'air de poser problème. J'ai quand même essayé de remplacer par ton nouveau code, et le problème n'est pas réglé
En fait, IE me dit que ces deux lignes là sont problématiques :
document.all["infobulle"].style.left=finalPosX+"px";
et
document.write("<layer name='infobulle' top='0' left='0' visibility='hide'></layer>");
Je rappelle que mon problème principal, est le fait que l'infobulle ne s'affiche pas sur IE seulement sur ma page index.php principale ! En gros, c'est l'include qui provoque ce non-affichage !
Pourquoi ? Je ne saurais pas dire !
ishanshade
Messages postés3Date d'inscriptionlundi 6 février 2006StatutMembreDernière intervention14 mars 2006 14 mars 2006 à 19:53
je me suis trompé pour la deuxieme ligne, c'est plutot celle ci que IE affiche comme erreur :
else if (ns6){document.getElementById("infobulle").style.visibility="hidden";} (au lieu de document.write("<layer name='infobulle' top='0' left='0' visibility='hide'></layer>");