Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Gestion double click sur un arbre

Envoyé par : Utilisateur anonyme

Date : 06/06/2005 11:19

Bonjour,

je recontre actuellement un problème sur la gestion d'un double click sur un arbre. Voici la déclaration de mon arbre (les données RDF sont correctement chargées) :

<tree id="liste" enableColumnDrag="true" flex="1" 
 flags="dont-build-content" ref="urn:data:row" datasources="rdf:null" 
 seltype="single" ondblclick="ouvrirFormulaire(this)">
 <treecols>
  <treecol id="p1" flex="1" label="p1"/>
 </treecols>
 <template>
  <treechildren>
   <treeitem uri="rdf:*">
    <treerow>
     <treecell label="rdf:http://aql/rdf#p1"/>
    </treerow>
   </treeitem>
  </treechildren>
 </template>
</tree>

Mon problème est que le double click qui fonctionne sur les éléments de mon arbre, fonctionne également sur les labels de l'arbre. C'est à dire que lorsqu'un doucle click est effectué sur le label de la colonne "P1", la fonction Javascript ondblclick="ouvrirFormulaire(this)" est aussi activée.

Savez-vous comment faire pour que le double click ne soit pas activé sur le label de l'arbre ?

Merci d'avance, Arnaud.

# Re: Gestion double click sur un arbre

Envoyé par : Utilisateur anonyme

Date : 06/06/2005 17:19

Personne ne peut m'aider ?

En fait j'ai continué ma recherche et j'ai trouvé la méthode onselect="" qui s'applique à la place de ondbclick="" mais le résultat n'est pas celui que j'attend.

La méthode onselect="" est appelée à chaque fois qu'un élément est sélectionné. Donc étant donnée que le label de l'arbre ne peut pas être sélectionné, la méthode ne se déclanche pas.

Il me faudrait donc une méthode du style ondbselect="" :-)

Est-ce que quelqu'un en connaît une ?

# Re: Gestion double click sur un arbre

Envoyé par : Julien Appert

Date : 06/06/2005 17:25

tu peux toujours faire une vérif du genre :

if(this.nodeName=="treecol") return false;

# Re: Gestion double click sur un arbre

Envoyé par : Utilisateur anonyme

Date : 07/06/2005 11:12

C'est une bonne piste, mais le problème est que je ne peux pas détecter si je clique sur le label ou sur un enregistrement. this.nodeName me retourne toujours la valeur tree, ce qui est logique car ma fonction JavaScript est déclaré sur l'élément tree.

Comment faire pour détecter où le click de souris est éffectué ?

# Re: Gestion double click sur un arbre

Envoyé par : Julien Appert

Date : 07/06/2005 11:30

si tu mets le ondblclick sur le treechildren, il ne sera déclenché que lorsqu'un double clique sera effectué sur un des items.

# Re: Gestion double click sur un arbre

Envoyé par : Utilisateur anonyme

Date : 07/06/2005 15:07

Lorsque je mets le ondbclick dans la balise treechildren, il ne rentre pas dans ma fonction JavaScript. Dans ma fonction JavaScript, il y a juste pour le moment un alert("bonjour");.

Je suis toujours bloqué !!!

# Re: Gestion double click sur un arbre

Envoyé par : Utilisateur anonyme

Date : 07/06/2005 18:08

Je viens de tomber par hasard sur un site de mozilla décrivant les éléments XUL http://www.mozilla.org/xpfe/xulref/.

J'ai remarqué que la fonction ondbclick ne peut être affecter qu'à l'élément tree et à aucun autre élément fils de tree.

Malgré tout est-ce que quelqu'un aurait une idée pour pouvoir détecter si je viens de double cliker sur le label de mon tableau ou sur un enregistrement ?

Merci d'avance.

Arnaud.

# Re: Gestion double click sur un arbre

Envoyé par : Julien Appert

Date : 07/06/2005 19:07

effectivement, si tu essayes avec ondbclick, ça ne va pas marcher. ondblclick fonctionne bien mieux.

Et crois moi, sur le treechildren, ça marche aussi très bien. La preuve par l'exemple :

<tree flex="1">
<treecols>
   <treecol id="expediteur" label="Expéditeur" flex="1"/>
   <treecol id="sujet" label="Sujet" flex="2"/>
 </treecols>

 <treechildren ondblclick="alert('chi')">
   <treeitem>
     <treerow>
       <treecell label="joe@somewhere.com"/>
       <treecell label="Plans top secret"/>
     </treerow>
   </treeitem>
   <treeitem>
     <treerow>
       <treecell label="mel@whereever.com"/>
       <treecell label="Allons manger"/>
     </treerow>
   </treeitem>
 </treechildren>
</tree>

# Re: Gestion double click sur un arbre

Envoyé par : Utilisateur anonyme

Date : 08/06/2005 14:32

J'ai bien testé ton code et oui effectivement cela fonctionne correctement.

Le problème est que moi dans mon application, l'arbre est construit dynamiquement avec la balise template. Du coup la fonction ondblclick (désolé j'avais fait une faute de frappe) ne fonctionne pas du tout.

Comment puis-je contourner ce problème? Est-ce que la déclaration de mon arbre avec le template est correcte sachant qu'elle fonctionne puisque j'ai des éléments dans mon arbre?

Arnaud.

# Re: Gestion double click sur un arbre

Envoyé par : Julien Appert

Date : 08/06/2005 14:42

ok, j'ai cru que tu avais fait la même erreur dans le code. S'il s'agit d'un problème dû au template, je vais pas pouvoir t'aider, je ne maîtrise pas le sujet.

# Re: Gestion double click sur un arbre

Envoyé par : Utilisateur anonyme

Date : 08/06/2005 15:01

Ba en tout cas je te remercie de ton aide.

J'en appelle donc à d'autres personnes aussi sympa que Julien qui pourraient m'indiquer comment contourner mon problème.

Merci d'avance, Arnaud.

# Re: Gestion double click sur un arbre

Envoyé par : HüN

Date : 01/08/2005 14:28

Je viens à peine de commencer à utiliser XUL mais je me suis retrouvé confronté au même problème récemment. Tu peux en javascript récupérer pas mal d'information sur l'évènement levé au moment du double click ; event.target.tagname vaut treecol lorsque l'utilisateur clique sur les en-têtes et treechildren lorsqu'il clique sur les données de l'arbre. En reprenant ton code :

<tree id="liste" enableColumnDrag="true" flex="1" 
 flags="dont-build-content" ref="urn:data:row" datasources="rdf:null" 
 seltype="single" ondblclick="if(event.target.tagName == 'treechildren') {ouvrirFormulaire(this);}">
 <treecols>
  <treecol id="p1" flex="1" label="p1"/>
 </treecols>
 <template>
  <treechildren>
   <treeitem uri="rdf:*">
    <treerow>
     <treecell label="rdf:http://aql/rdf#p1"/>
    </treerow>
   </treeitem>
  </treechildren>
 </template>
</tree>

Ceci devrait fonctionner. Personnellement j'ai préféré mettre le test directement dans la fonction appellée au double click afin de ne laisser qu'un minimum de javascript dans mon fichier XUL. En espérant que ça pourra aider quelqu'un.

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.