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

matiassa Messages postés 6 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 25 novembre 2008 - 24 nov. 2008 à 15:30
matiassa Messages postés 6 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 25 novembre 2008 - 25 nov. 2008 à 17:21
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

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
24 nov. 2008 à 16:30
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
0
matiassa Messages postés 6 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 25 novembre 2008
24 nov. 2008 à 17:11
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.
0
matiassa Messages postés 6 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 25 novembre 2008
24 nov. 2008 à 17:14
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.
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
24 nov. 2008 à 18:18
Bonjour,
pas tout lu mais sur un DIV un onmouseout me semble suffisant...
peut être me trompe je...
;O)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
matiassa Messages postés 6 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 25 novembre 2008
25 nov. 2008 à 17:21
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
0
Rejoignez-nous