PB affichage infobulle non correct sur IE

Résolu
flophp Messages postés 2 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 6 octobre 2008 - 6 oct. 2008 à 00:39
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 7 oct. 2008 à 10:23
Bonjour, je souhaite créer une infobulle au passage de la souris sur une image.
Sur Firefox le resultat est OK, une div se crée à coté de l'image avec ses caracteristiques et son texte.
Par contre sous IE, seul le texte apparait en dehors de mon body (la div avec sa taille, border, color n'apparaissent pas)

j'appelle dans mon fichier php le javascript comme ceci:
 - startAideLigne fait apparaitre la bulle
 - aideLigne fait un suivi de la souris
 - stopAideLigne enleve la bulle

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ensuite dans monfichier js
function getEl(id) {
    return document.getElementById(id);
}

var valX;
var valY;
var ecartX;
var ecartY;
var draging = false;
var monElAide = null;

function getMouse(e)                                // fonction pour récuperer les coordonées du curseur
    {
        valX = e.clientX;
        valY = e.clientY;
    }
   
function startAideLigne(e,el) {               // affiche la bulle d'aide
    var monDiv = document.createElement('DIV');
    var nom = el.getAttribute('id');
    var body = document.getElementsByTagName('BODY')[0];
    draging = true;
    monDiv.setAttribute('style', 'position:absolute; width:200px; border:solid 1px black; background-color:yellow;');
    monDiv.setAttribute('id', 'aide' + nom);
    monDiv.innerHTML = appelAide(nom);            //appelAide() renvoie le contenu de la bulle
    body.appendChild(monDiv);
    getMouse(e);
    monDiv.style.top = valY - parseInt(monDiv.offsetHeight) - 5 + "px";
    monDiv.style.left = valX + 5 + "px";
    ecartY = valY - parseInt(monDiv.offsetTop);
    ecartX = valX - parseInt(monDiv.offsetLeft);
    monElAide = monDiv;
}
   
function aideLigne(e) {                     // pour gérer le déplacement de la bulle d'aide par rapport au curser
    var valX2 =0;
    var body = document.getElementsByTagName('BODY')[0];
    if(draging == true)
    {
        getMouse(e);
        if(valX>(parseInt(body.offsetWidth)-parseInt(monElAide.offsetWidth))){
            valX2 = valX - parseInt(monElAide.offsetWidth) - 10;
        }
        else{
            valX2 = valX;
        }
        monElAide.style.left = valX2 - ecartX + "px";
        monElAide.style.top  = valY - ecartY + "px";
    }
}
   
function stopAideLigne() {                   // pour enlever la bulle d'aide
    draging = false;
    monElAide.parentNode.removeChild(monElAide);
}

Voilà, j'espere avoir été clair dans mon soucis d'affichage IE.
Merci d'avance pour vos reponses.

3 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
7 oct. 2008 à 10:23
>>il y avait une difference entre FF et IE au niveau des setAttribute
y'a pas qu'là, mais là aussi ;o)
je te disais : pas regardé plus loin...   il en reste peut-être des incompatibilités !
( c'était loin d'être une supputation )

maintenant, perso, j'évite les set | get Attribute

monDiv.style.???=valeur
ou, comme dans ton cas, monDiv.className=

Bul[mon Site][M'écrire]
3
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 oct. 2008 à 09:32
bonjour,

ben déjà ta fonction getMouse ne fonctionnera pas avec IE.

   if (ie)     {
                   event.x+document.body.scrollLeft;
                   event.y+document.body.scrollTop;
                }
    else        {
                   e.pageX;
                   e.pageY;
                }

pas regardé plus loin...   il en reste peut-être des incompatibilités !
le debogage + rechercher dans la doc t'aidera
FireFox
, regarder la "console d'erreurs"
Outils / Console d'erreurs
et mieux : télécharger mon Site][M'écrire]
0
flophp Messages postés 2 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 6 octobre 2008
6 oct. 2008 à 21:08
Bonjour et merci Bultez pour ta réponse, je l'ai bien integré par :

function getMouse(e) {                // fonction pour récuperer les coordonées du curseur
    if(navigator.appName=="Microsoft Internet Explorer"){
        valX = event.x + document.body.scrollLeft;
        valY = event.y + document.body.scrollTop;
    }
    else {
        valX = e.clientX;
        valY = e.clientY;
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////

Mais celà n'a pas resolu le probleme de monDiv qui ne trouve pas ses attributs de style, et j'ai trouvé qu'il y avait une difference entre FF et IE au niveau des setAttribute('style','.........')
En effet ceci fonctionne sous FF:
monDiv.setAttribute('style', 'position:absolute; width:200px; background-color:yellow; border:solid 1px black;');

par contre sous IE non, il faut passer par :
monDiv.style.setAttribute("cssText","position:absolute; width:200px; background-color:yellow; border:solid 1px black;");

Donc il faut refaire un test du navigateur comme pour getMouse()
Voilà en esperant que cela puisse servir à quelqu'un d'autre

J'ai fais d'autre modifs entre temps sur ce code, si vous souhaitez une info hesitez pas.

Merci ++
0
Rejoignez-nous