Probleme affichage infobulle calendrier avec IE mais pas avec firefox

ishanshade Messages postés 3 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 14 mars 2006 - 12 mars 2006 à 15:07
ishanshade Messages postés 3 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 14 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

3 réponses

cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 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.

Cordialement
Roro webDev
0
ishanshade Messages postés 3 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 14 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 !
0
ishanshade Messages postés 3 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 14 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>");
0
Rejoignez-nous