IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Appel d'une fonction JS Via un Menu Contextuel


Sujet :

JavaScript

  1. #1
    Membre à l'essai Avatar de Biboude
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Appel d'une fonction JS Via un Menu Contextuel
    Bonjour à tous !

    Après de NOMBREUSEEE recherche sur le net ! Je suis toujours à la recherche d'une solution.

    Je m'explique ça fais maintenant plus de trois jours que je recherche le moyen de faire correspondre un click dans un menu contextuel à une fonction en JS je touche au but.

    Mais malheureusement j'ai l'impression de tournée en rond.
    (Je vous voie venir avec vos tuto de menu contextuel en Jquery en html simple etc .. c'est vue et revue (Et en plus le PB n'est pas là !) )

    J'utilise une librairie nommé DHTMLX qui fournie des fonctions lié au menu contextuel. Donc j'ai mis en place tout ce bazar

    Mais il y a un mais ! Quand je click (Gauche) sur l'une de mes div (qui son doté de onclick() je sais c'est moche xD ) Baaaaa... Il ne ce passe rien.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <!-- Menu Contextuel -->
     
        <div id="menuData" style="display: none;">
     
            <div id="m1" text="File">
     
                <div id="m11" text="Cut" img="cut.gif" imgdis="cut_dis.gif" onclick="cut();"><hotkey>Ctrl+X</hotkey></div> 
     
                <div id="ms1" type="separator"></div> // a separator
     
                <div id="m12" text="Copy" img="copy.gif" imgdis="copy_dis.gif" onclick="TEST();"><hotkey>Ctrl+C</hotkey> </div> 
                <div id="m13" text="Paste" img="paste.gif" imgdis="paste_dis.gif" onclick="paste();"><hotkey>Ctrl+V</hotkey></div> 
            </div>
        </div>
    <!---------------->

    J'ai testé beaucoup de solution et je reste sans solution (Je tient a précisé que mes fonctions fonctionne très bien a part !)

    Le plus bizarre c'est que l'lorsque j'essai d'accédé a l'un de mes éléments via un GetElementById il me revoie une erreur comme quoi mon contextemenu est "null"

    Pour ce qui est du JS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    //#region MENUX
     
        var menu = new dhtmlXMenuObject(); // Création de l'objet Menu
        menu.setIconsPath("./Scripts/codebase/imgs/"); // Charge imgs
        menu.renderAsContextMenu();
        //menu.loadStruct("./Scripts/codebase/dhxmenu.xml?e=" + new Date().getTime()); // Load structure Menu XML file
        menu.loadFromHTML("menuData", true); // Load HTML Structure    
        var event_id, cb_date, cb_isCopy, cb_section = null;
     
        scheduler.attachEvent("onContextMenu", function (event_id_loc, native_event_object) { // appel du Menu context
            event_id = event_id_loc;
            cb_date = scheduler.getActionData(native_event_object).date;
            cb_section = scheduler.getActionData(native_event_object).section;
     
            /* Menu position */
            var posx = 0;
            var posy = 0;
            if (native_event_object.pageX || native_event_object.pageY) {
                posx = native_event_object.pageX;
                posy = native_event_object.pageY;
            } else if (native_event_object.clientX || native_event_object.clientY) {
                posx = native_event_object.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
                posy = native_event_object.clientY + document.body.scrollTop + document.documentElement.scrollTop;
            }
     
            /* Menu items */
            if (event_id) {            
                menu.showItem("m11");
                menu.showItem("ms1");
                menu.showItem("m12");
                menu.hideItem("m13");
                menu.hideItem("ms2");
                menu.showContextMenu(posx, posy);
            }
            else {            
                menu.hideItem("m11");
                menu.hideItem("m12");
                menu.showItem("m13");
                menu.hideItem("ms1");
                menu.hideItem("ms2");
                menu.showContextMenu(posx, posy);
            }
    Voilà donc jusque là ça va ! Le menu s'affiche tout va bien sauf que quand je clik !!!! Gauche sur l'une des rubriques, il ne ce passe rien LEL !

    En ce moment je Test ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if (menu.getItemType("m11").click == true){menu.forEachItem(cut);}
            if (menu.getItemType("m12").click == true){menu.forEachItem(copy);}
            if (menu.getItemType("m13").click == true){menu.forEachItem(paste);}
            menu.forEachItem(copy);
    Idéalement j'aimerais savoir lorsque l'utilisateur click sur la div cut ou copy ou parse ! mais vue que le GetElementById ne marche pas et bien je suis un peu bloquer !

    Maintenait si quelqu'un pouvais m'éclairé un peu je dit pas non.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Points : 1 385
    Points
    1 385
    Par défaut
    Bonjour,

    cela fait longtemps que je n'ai pas touché à DHTMLX mais il me semble que pour faire fonctionner le getElementById il faut suffixer l'id par "_object" car DHTMLX renomme les champs. Passer uniquement par des objets DHTMLX devrait fonctionner aussi (menu.getItemXxx).

  3. #3
    Membre à l'essai Avatar de Biboude
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Bonjour et merci pour cette réponse rapide Christophe

    Je vais testé ta technique le plus tôt possible. Mais je m'interroge car ça fais quand même trois mois que je suis sur beaucoup de fonctionnalité JS et je n'est a aucun moment utilisé "_"

  4. #4
    Membre à l'essai Avatar de Biboude
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Mauvaise nouvelle !

    la technique du "_" ne marche pas il me revoie toujours un null pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var item = document.getElementById("_m11");

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Points : 1 385
    Points
    1 385
    Par défaut
    Je voulais dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var item = document.getElementById("m11_object");

  6. #6
    Membre à l'essai Avatar de Biboude
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Encore merci Christophe !

    Mais malheureusement il me revoie toujours un null :/ je désespère

  7. #7
    Membre à l'essai Avatar de Biboude
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Le Context
    Je vais remettre un peu de clarté dans ce que je recherche:

    J'ai un menu contextuelle qui ressemble à ça: File -> cut
    copy
    paste


    Ce que je voudrais quand je click (gauche) sur l'une des divs contenue dans mon menu c'est qu'il appel ma fonction cut(); par exemple.
    Le problème c'est que la logique d'appel de ma fonction n'existe pas dans la logique du petit menu donc il ne ce passe rien.

    Idéalement j'aimerais pouvoir détecté un click sur l'une de mais trois divs pour faire ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (elemtnDiv("m11").click) {menu.forEachItem(cut);}
    En gros il ne me manque plus que la détection d'un click sur cut ou copy ou paste et tout le reste suivra !

  8. #8
    Membre à l'essai Avatar de Biboude
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Alors je pense qu'il y a une histoire d'ordre d'initialisation.

    j'explique en gros j'ai une fonction DoInit(); que j'exécute sur un onload. Dedans j'ai mis l'init de mon menu contextuel. j'attache un Event "onclick" (comme ça quand je vais cliqué mon menu contextuel apparais).

    Bref dans mon html j'ai des divs qui représente mon menu contextuel avec un style:none;

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!-- Menu Contextuel -->
        <div id="menuData" style="display: none;">
            <div id="m1" text="File">
                // the first top menu item
                <div id="menu11" text="Cut" img="cut.gif" imgdis="cut_dis.gif"><hotkey>Ctrl+X</hotkey></div>  //the first child item
                <div id="ms1" type="separator"></div> // a separator
                <div id="menu12" text="Copy" img="copy.gif" imgdis="copy_dis.gif"><hotkey>Ctrl+C</hotkey> </div> //the second child item
                <div id="menu13" text="Paste" img="paste.gif" imgdis="paste_dis.gif"><hotkey>Ctrl+V</hotkey></div> //the third child item
            </div>
        </div>
        <!---------------->

    dans mon JS je veux récupérer les éléments "Cut" / "Copy" / "Paste" Pour pouvoir leur attaché un event "onclick" Sauf que quand je fais un getElementById il me dit que les éléments n'existe pas

    Donc je cherche a récupérer un élément qui n'existe pas l'or de mon initialisation. Car il est crée après.

    Si quelqu'un a une idée pour que je puisse récupérer mes éléments ?

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Points : 1 385
    Points
    1 385
    Par défaut
    Peut-être appeler DoInit sur onpageshow ou un autre événement ?

  10. #10
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 135
    Points : 44 923
    Points
    44 923
    Par défaut
    Bonjour,
    peut être devrais tu lire plus avant la documentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function handleClick(){
        // ici tu fais ce que tu veux avec les paramètres passés
        console.log(arguments);
    }
    var oContextMenu = new dhtmlXMenuObject(
      {
        context: true,
        onclick: handleClick
        }
      });

  11. #11
    Membre à l'essai Avatar de Biboude
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Bonjour et merci de vos retour je vais essayé ça tout de suite.

    Et des docs j'en n'est lut plein mais rien sur handle désoler

  12. #12
    Membre à l'essai Avatar de Biboude
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    No smoke je voudrais savoir y a t-il moyen d'associé le onclick sur les éléments que je veux car pour l'instant peux import ou je click dans mon menu il exécute handle.

    Et une autre chose après le chargement de mon application mais balise contenue dans mon menu contextuel ne sont plus accessible par des GetElementById

  13. #13
    Membre à l'essai Avatar de Biboude
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Bon mon vrais problème c'est que je n'arrive pas a accédé aux éléments dans mon menu

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!-- Menu Contextuel -->
        <div id="menuData" style="display: none;">
            <div id="m1" text="File">
                // the first top menu item
                <div id="menu11" text="Cut" img="cut.gif" imgdis="cut_dis.gif"><hotkey>Ctrl+X</hotkey></div>  //the first child item
                <div id="ms1" type="separator"></div> // a separator
                <div id="menu12" text="Copy" img="copy.gif" imgdis="copy_dis.gif"><hotkey>Ctrl+C</hotkey> </div> //the second child item
                <div id="menu13" text="Paste" img="paste.gif" imgdis="paste_dis.gif"><hotkey>Ctrl+V</hotkey></div> //the third child item
            </div>
        </div>
        <!---------------->

    Peut import que je fasse GetElemtnById(); ou en JQuery $("#IdElem");

    Pour le GetElement il me retourne undefinied et pour le JQuery j'ai bien un objet mais pas moyen de lui appliqué des méthodes LEL !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Appel d'une fonction via une variable
    Par byrong dans le forum ASP.NET
    Réponses: 1
    Dernier message: 19/10/2013, 12h26
  2. Appel d'une fonction via l'invite de commande
    Par Pascale38 dans le forum Général Java
    Réponses: 5
    Dernier message: 09/12/2009, 19h12
  3. Réponses: 1
    Dernier message: 17/12/2008, 09h39
  4. Réponses: 4
    Dernier message: 05/11/2007, 10h19
  5. Appeler une fonction Access via un .bat
    Par kluh dans le forum Access
    Réponses: 12
    Dernier message: 28/11/2005, 00h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo