Se connecter avec
S'enregistrer | Connectez-vous

Compatibilité javascript(propriété event) sous FireFox

Dernière réponse : dans Programmation

Saluté tout lé monde !

J'ai un gros probleme de compatibilité. Le code suivant (qui est l'affichage d'une fenetre en suivant le pointeur de la souris).
ça marche sous IE, mais pas sous FireFox, snif snif ...


Voici mon code
ça c'est dans le head :

<style type="text/css">
.popper { POSITION: absolute; VISIBILITY: hidden; filter:alpha(opacity=90); }
</style>

et ça c'est dans mon body:

<DIV class="popper" id="topdeck">
<SCRIPT language="JavaScript">
var nava = (document.layers);
var iex = (document.all);
var skn = (nava) ? document.topdeck : topdeck.style;
if (nava) {document.captureEvents(Event.MOUSEMOVE)};
document.onmousemove = get_mouse;

function pop(msg)
{
skn.display = "block";
var content ="<TABLE WIDTH=220px height=100% BORDER=0px CELLPADDING=1px CELLSPACING=0px BGCOLOR=#000000><TR><TD><TABLE WIDTH=100% HEIGHT=100% BORDER=0px CELLPADDING=4px CELLSPACING=0px CLASS=fontzones><TR><TD valign=top style=padding-bottom=20; "+msg+"</TD></TR></TABLE></TD></TR></TABLE>";
if (nava)
{
skn.document.write(content);
skn.document.close();
skn.visibility = "visible";

}
else if (iex)
{
document.all("topdeck").innerHTML = content;
skn.visibility = "visible";
}
}
function get_mouse(e)
{
var x = event.x+document.body.scrollLeft;
var y = event.y+document.body.scrollTop;
skn.left = x;
skn.top = y;

}
function kill()
{
skn.visibility = "hidden";
skn.display = "block";
}
</SCRIPT>
</div>

Je sais que le probleme vient du fait que dans ma fonction get_mouse(e), j'ai
var x = event.x+document.body.scrollLeft;
var y = event.y+document.body.scrollTop;
et event n'est pas pris en charge par fire fox...


Y'a t-il un moyen de contourner ce problème ??
Merci d'avance !!!
:hello: 
Lassé par la pub ? Créez un compte

vite fait, ça doit pouvoir t'aider:
  1. function get_mouse(e) {
  2. var scrOfX = 0, scrOfY = 0;
  3. if (typeof(window.pageYOffset) == 'number' ) {
  4. //Netscape compliant
  5. scrOfY = window.pageYOffset;
  6. scrOfX = window.pageXOffset;
  7. } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
  8. //DOM compliant
  9. scrOfY = document.body.scrollTop;
  10. scrOfX = document.body.scrollLeft;
  11. } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
  12. //IE6 standards compliant mode
  13. scrOfY = document.documentElement.scrollTop;
  14. scrOfX = document.documentElement.scrollLeft;
  15. }
  16. skn.style.left = eventObj.clientX + scrOfX + 'px';
  17. skn.style.top = eventObj.clientY + scrOfY + 'px';
  18. }

Sniiiiiiiiiiiiiiiiiiiiiiiiiiiiiff !!!
ça morche po

kan j'ouvre la console javascript de google j'ai ce code d'erreur :

Avertissement : Élément référencé par son ID/NAME dans le contexte global. Utilisez la propriété standard du W3C document.getElementById() à la place.
Fichier source : http://localhost/ABC/index.php
Ligne : 33

Ma foué , je comprend pu ...
Expert Programmation

Citation :
j'ai ce code d'erreur :

Avertissement :


T'appeles ça un message d'erreur toi ?
Si y'a marqué Avertissement, c'est que c'est pas une erreur !

Avec Firefox, il faut faire des getElementById, remplace les skn par document.getElementById('skn')
Expert Programmation

j'ai jamais eu de soucis avec des document.getElementById() avec IE...

(Edit : en fait si je te disais ça a propos de l'avertissement, c'est qu'un avertissement n'empèche pas la bonne exécution d'un programme, alors qu'une erreur oui !)
Expert Programmation

Salut,

Firefox passe l'évènement en paramètre de la fonction.
Récupères l'évènement en ajoutant un paramètre à ta fonction, et tu pourras l'utiliser pour firefox.
Tu vérifies si event est null pour voir si c'est firefox ou ie, et tu fais en fonction.

re,

merci Omar pour lavancé du schmilblick...


ok pour le principe de la fonction,cependant je reste débutant dans le domaine,et fébrile en gestion de fonction...


voici les deux lignes ki bugge avec firefox:

mymenu.top = document.body.scrollTop + event.clientY - event.offsetY;
mymenu.left = document.body.scrollLeft + event.clientX - event.offsetX + ParentMenuWidth;

qd je vire les event.client et event.offsett,par une valeur chiffrée,le script fonctionne,cependant le placement du menu est pas forcément a l'endroit voulu selon les résolutions graphiques des postes utilisateurs.

donc si je suis bien ta proposition:
faut ke je crée une fonction ki gere si c'est Firefox ou IE par la valeur de la fonction event.?puis mettre le code ki va pour chaque Navigateur?
pour IE,je l'ai mais pour Firefox,je me sens seul o monde :) 
c'est peut être abusé de ma part,mais ya til qqun, qui sache codé mes 2 lignes pour que ce soit interprété correctement sur Firefox?

merci d'avance.


Expert Programmation

Salut,

Ta fonction tu l'appelles sur un évènement, on est d'accord ? Genre sur le onload de ton body, ou je sais pas, oui ?
Avec Firefox, ces évènements prennent un paramètre, avec IE il ne me semble pas.

Du coup, tu as ta fonction qui ressemble à ça :
  1. function gestionEvenement() {
  2. mymenu.top = document.body.scrollTop + event.clientY - event.offsetY;
  3. mymenu.left = document.body.scrollLeft + event.clientX - event.offsetX + ParentMenuWidth;
  4. }


Avec Firefox, il te faudrait quelque chose comme ça :
  1. function gestionEvenement(e) {
  2. if(event != null) {
  3. mymenu.top = document.body.scrollTop + event.clientY - event.offsetY;
  4. mymenu.left = document.body.scrollLeft + event.clientX - event.offsetX + ParentMenuWidth;
  5. } else {
  6. mymenu.top = document.body.scrollTop + e.clientY - e.offsetY;
  7. mymenu.left = document.body.scrollLeft + e.clientX - e.offsetX + ParentMenuWidth;
  8. }
  9. }


Et ça devrait le faire il me semble
Lassé par la pub ? Créez un compte
Tom's guide dans le monde