Menu contextuel après clic bouton sous IE et Firefox

cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006 - 11 oct. 2006 à 17:16
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 - 12 oct. 2006 à 23:46
Bonjour,


  Je suis nouveau dans ce language mais on m'a demandé de régler un problème concernant un menu contextuel avec Firefox.


  En fait, lorsque l'on clic sur un élément dans la page web, un
petit menu contextuel s'affiche. A la base, il semblerait que cela a
été créé pour IE et Netscape. Le problème étant que l'on utilise de
plus en plus firefox (on se demande bien pourquoi lol) et du coup la
manip ne fonctionne plus alors que sous IE pas de problème.


   voila un extrait du code où il semblerai y avoir un problème :


NS4 = (document.layers);

IE4 = (document.all);

ver4 = (NS4 || IE4);

IE5 = (IE4 && ((navigator.appVersion.indexOf("5.")!=-1) || (navigator.appVersion.indexOf("6.")!=-1)) );


function makeElement(whichEl,whichWidth,whichParent,whichContainer)

{

      PrintAlert ("function makeElement");

    if (NS4)

    {

            if (whichWidth)

        {

              elWidth = whichWidth;

            }

            else

        {

             
elWidth = (whichContainer) ? whichContainer.menuWidth :
whichParent.menuWidth;

              if (whichContainer)

                elWidth = elWidth-(borWid*2)-(itemPad*2);

            }

            if (!whichContainer)

            whichContainer = menuLoc;

            eval(whichEl + "= new Layer(elWidth,whichContainer)");

      }

      else

    {

            if (IE5)

        {

              newDiv = menuLoc.document.createElement("DIV");

              newDiv.style.position = "absolute";

              newDiv.id = whichEl;

              menuLoc.document.body.appendChild(newDiv);

            }

            else

        {

             
elStr = "

";

             
menuLoc.document.body.insertAdjacentHTML("BeforeEnd",elStr);

            }

            if (isFrames)

            eval(whichEl + "= menuLoc." + whichEl);

      }

      return eval(whichEl);

}


La console javascript me renvoie :
Erreur : menuLoc.document.body.insertAdjacentHTML is not a function


Comment puis-je corriger ce problème?


Merci d'avance.

4 réponses

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
11 oct. 2006 à 22:08
L'erreur le dit la fonction n'est pas supportée sur Firefox. Il existe peut-être un équivalent, mais je ne crois pas qu'il y en ait un, car cette fonction n'est pas standard et est donc a évité lorsqu'on veut faire quelque chose d'accessible pour tous les navigateurs. Normalement, lorsqu'on veut faire un menu contextuel personnalisé, on utilise l'événement oncontextmenu. Une source la dessus a été posté il n'y a pas longtemps sur javascriptfr.

http://www.javascriptfr.com/codes/MENU-CONTEXTUEL-PERSONNALISABLE-AVEC-CHOIX-IMAGES_39741.aspx
0
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006
12 oct. 2006 à 08:15
merci je vais regarder ca de près.


Par contre, est-ce qu'il existe un endroit où sont "listées" les
fonctions standard ainsi que les autres en fonction du navigateur?
0
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006
12 oct. 2006 à 14:33
Bien ca marche presque,


      Le problème c'est que je ne veut afficher mon
menu popup perso uniquement quand je clic "gauche" sur un bouton.


     Dans les autres cas, c'est le popup standard du navigateur qui doit s'afficher.
0
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
12 oct. 2006 à 23:46
Si tu veux que le menu perso s'affiche uniquement sur une zone ou un bouton. Au lieu de mettre l'événement dans la balise body, tu peux le mettre dans une balise input. Exemple :

Dans le code tu vois quelque chose dans le genre :


Et bien si tu as envie que ça s'applique que pour un input :

Et tu enlèves le oncontextmenu dans la balise body.
0
Rejoignez-nous