Incompatibilité IE7/ Firefox3 - problème sur "onblur"

Signaler
Messages postés
6
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
25 novembre 2008
-
Messages postés
6
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
25 novembre 2008
-
Bonjour,

Je travaille actuellement sur les problème d'incompatibilité IE6/IE7 et Firefox3.

J'utilise plusieurs fonctions javascript telles que:


function hideContextMenu()
{



obj=document.getElementById(

"menu0"
);



obj.style.visibility='hidden';



}







function



blurHandler()

{





obj=document.getElementById(

"menu0"
);

setTimeout(


"hideContextMenu()"
,200);


}



Dans mon application, suite au clic droit de souris, j'affiche un menu (cf."menu0"). Le problème est que le menu affiché ne disparait jamais sous firefox. Après étude du code, il semblerait que ma fonction blurHandler() est bien appelée sous IE mais pas sous Firefox (cf.
ci dessous).







<
div
style
=

"position:absolute;left:100px;top:0px;z-index:0;visibility:hidden;"

id



=

"menu0"
onblur
=

"blurHandler();return true;"
></


div
>



Existe t-il un problème connu avec "onblur" sous firefox?


Si quelqu'un a un idée?

Merci.


 

5 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
bonjour,
on peut dire que les problèmes ça n'existe pas avec un navigateur

plusieurs remarques :
1° pour qu'avec le div on puisse faire quelque chose, il faut qu'il soit visible.
2° lu chez selfhtml :

<title>SELFHTML: JavaScript/DOM / Éléments du langage JavaScript / Gestionnaires d'événements</title><link href="../../src/selfhtml.css" type="text/css" rel="stylesheet" /><link href="/selfhtml/chm/contextmenu.css" type="text/css" rel="stylesheet" />mon Site][M'écrire]Bul
Messages postés
6
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
25 novembre 2008

Ok. D'après ce que tu me dis, ça ne peut pas fonctionner dans un div. 
Peut-être, comme tu le dis, je n'ai pas tout compris (je débute en javascript).

Peut être que le "onblur" de mon div fonctionne car il est associé à   "event.layerY" dans ma fonction
function

showContextMenu(arrMenu,event,wind)
{

if(is_ie && !is_ie7 )
return;
obj=document.getElementById(
"menu0");callerWindow=wind;

menuText=

"<%=IMAGES_DIR%>menubg.gif'>\";

for(i=0;i{if

(arrMenu[i]==\"hr\")menuText+=\"----
<%=IMAGES_DIR%>menusplit.gif'><%=IMAGES_DIR%>spacer.gif' height=5>, \";

else{

menuText+=\"----
<"+"a href=# onclick=\"callerWindow.invoke('"+arrMenu[i][2]+"')\" class=menulink><%=IMAGES_DIR%>spacer.gif\" border=0 width=20 height=20 align=absmiddle>"+arrMenu[i][1]+

", \";

}

}

menuText+="
";

obj.innerHTML=menuText;

if(is_ie )
{

obj.style.left=event.x;obj.style.top=event.y;

}else{

obj.style.left=event.layerX;obj.style.left=event.layerY;

}

obj.style.visibility=
'visible';obj.focus();

}

Cette fonction est appelée par :
function

rightClickOverride(event)
{if

(navigator.appName ==
"Netscape")
{

parent.showContextMenu(contextMenu,event,window);

return false;

}avec "contextMenu
" défini dans une classe java de la manière suivante :
out.write("<script> var contextMenu=new Array(");
      out.write("new Array('',""+Res.getString("menu_sub_directory",request)+"","doNewFolder()"),\n");
      out.write("new Array('',""+Res.getString("menu_template",request)+"","doNewTemplate()"),\n");
      
      out.write("'hr',\n");
      out.write("new Array('',""+Res.getString("menu_copy",request)+"","doCopyCut(false)"),\n");
      out.write("new Array('',""+ Res.getString("menu_cut",request)+"","doCopyCut(true)"),\n");
      out.write("new Array('',""+ Res.getString("menu_paste",request)+"","doPaste()"),\n");
      out.write("'hr',\n");
      out.write("new Array('',""+Res.getString("menu_rename_directory",request)+"","doRenameFolder()"),\n");
      out.write("new Array('',""+Res.getString("menu_delete_directory",request)+"","doDeleteFolder()")\n");
     }else{
      out.write("new Array('',""+Res.getString("menu_new_document",request)+"","doNewDocument()"),\n");
      out.write("new Array('',""+ Res.getString("menu_paste",request)+"","doPaste()")\n");
     }
     out.write(");</script>");
 Honnetement, je débute sur l'application et j'ai a rechercher dans énormémént de fichiers, donc en effet, il se peut que je ne voit pas tout.
Messages postés
6
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
25 novembre 2008

Désolée, j'ai cliqué sur ajouter le message alors que je n'avais pas terminé.

Je disais donc:

avec "contextMenu
" défini dans une classe java de la manière suivante :

out.write("<script> var contextMenu=new Array(");
      out.write("new Array('',""+Res.getString("menu_sub_directory",request)+"","doNewFolder()"),\n");
      out.write("new Array('',""+Res.getString("menu_template",request)+"","doNewTemplate()"),\n");
      out.write(");</script>");

 Honnetement, je débute sur l'application et j'ai a rechercher dans énormémént de fichiers, donc en effet, il se peut que je ne voit pas tout.

Voilà.
Merci et encore désolée.
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
16
Bonjour,
pas tout lu mais sur un DIV un onmouseout me semble suffisant...
peut être me trompe je...
;O)
Messages postés
6
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
25 novembre 2008

PB RESOLU!!

En effet, "onblur" ne fonctionne pas dans un div. Cela fonctionnait avec IE, c'est pour ça que je trouvais bizar qu'on me dise que onblur ne marche pas pour un div, mais il semblerait que ce soit un bug de IE, il laisse passer l'erreure.

Pour finir, j'ai fait comme proposé par Petole Team. J'utilise un onmouseout 
. J'ai ensuite modifié le temps dans ma fonction setTimeout pour que l'utilisateur ait le temps de choisir dans le menu.

Merci à tous pour vos réponses.

Matiassa