Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Bloquer la propagation d'un événement onpopupshowing dans les sous menu

Envoyé par : Vilya

Date : 16/07/2007 12:17

Bonjour à tous,

J'ai un petit soucis concernant la génération en javascript d'un menu contenant plusieurs sous-menu. Le contenu de mon menu varie dans le temps, il n'est donc pas statique et je le génère "à la volée" avant son affichage via le gestionnaire d'événement "onpopupshowing" (pour le dépeupler dès qu'il est masqué).

Un bout de code valant mieux qu'un long discours,

Dans mon overlay, mon menu est défini de cette façon :

<menu id="myMenuId" label="myLabel" accesskey="myAccesskey">
  <menupopup id="myMenupopupId"
      onpopupshowing="myFunction()" />
</menu>

Le problème est que lors de l'appel à la fonction myFunction() je peuple mon menu avec d'autres sous menu ce qui fait que je me retrouve avec une structure du genre :

<menu id="myMenuId" label="myLabel" accesskey="myAccesskey">
  <menupopup id="myMenupopupId" onpopupshowing="myFunction()">
    <menu>
      <menupopup>
        <menuitem (...) />
        <menuitem (...) />
        <menuitem (...) />
      </menupopup>
    </menu>
    <menu>
      <menupopup>
        <menuitem (...) />
        <menuitem (...) />
        <menuitem (...) />
      </menupopup>
    </menu>
    (...)
  </menupopup>
</menu>

Le système de propagation des événements est tel qu'à l'ouverture de ces sous menu (en phase de bubbling) la fonction myFunction() est appelée à nouveau, ce qui est loin d'être souhaité.

Je voulais donc savoir s'il existait un moyen propre de gérer ce conflit et par la même occasion si des experts en la matière avait des propositions d'implémentation plus élégantes :)

En vous remerçiant par avance,

Vilya

# Re: Bloquer la propagation d'un événement onpopupshowing dans les sous menu

Envoyé par : thefab

Date : 16/07/2007 12:25

Un event.stopPropagation() devrait faire l'affaire. (advevents.html)

Ajout de event comme paramètre

<menu id="myMenuId" label="myLabel" accesskey="myAccesskey">
  <menupopup id="myMenupopupId" onpopupshowing="myFunction(event)" />
</menu>
function myFunction(e)
  {
  e.preventDefault();
  e.stopPropagation();
  ...
  }

# Re: Bloquer la propagation d'un événement onpopupshowing dans les sous menu

Envoyé par : Vilya

Date : 16/07/2007 14:10

J'ai également testé mais ça ne fonctionne pas.

Le e.preventDefault() va entraîner la non ouverture du premier menu et le e.stopPropagation() ne semble avoir aucun effet (positif ou négatif)

Une solution dérivée consiste par contre à appeler une fonction similaire sur les différents niveaux de sous-menu, mais ça ne me paraissait pas super propre :/

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.