Forums : Les possiblités de la plateforme Mozilla

Aller à la discussion :  Plus récente Plus ancienne

# [Resolu] oncommand sur une colonne de type checkbox

Envoyé par : Alexandre

Date : 17/11/2009 16:55

Bonjour,

J'ai un tableau que je remplis avec des données issues d'un RDF. la dernière colonne de mon tableau est de type checkbox. Je n'arrive pas à utiliser les évènements (onclick, oncommand, onchange, etc...) sur les cellules contenant les chekbox. J'aimerais pouvoir déclencher un évènement à chaque fois que je coche ou décoche une checkbox de mon tableau.

Voici un extrait de mon code :

<tree id="tree_export" flex="1" 
 ref="urn:data:row" datasources="" 
 seltype="single" editable="true"> 
            ...
            ...
          <treecol id="import_caracteristique" type="checkbox" label="A importer" editable="true"  />
        </treecols>
        <template>
          <rule>
            <treechildren>
              <treeitem uri="rdf:*" checked="true">
                <treerow>
                   ...
                   ...
                  <treecell value="rdf:http://dummy/rdf#import"  oncommand="selectionCheckBox()"/>
                </treerow>
              </treeitem>
            </treechildren>
          </rule>
        </template>
      </tree>

Si vous avez des idées, n'hésitez pas, merci d'avance

# Re: oncommand sur une colonne de type checkbox

Envoyé par : mistervince

Date : 18/11/2009 11:03

Voici ce que je sais. (si il y a plus simple ou plus 'propre', je suis preneur aussi...).

  • l'attribut checked="true" sur le treeitem est inutile : c'est l'attribut value du treecell (dans une colonne type="checkbox") qui détermine l'état coché ou non.
  • aucun évènement n'est généré par les éléments à l'intérieur de l'arbre. Il faut écouter les évènements au niveau de l'arbre lui-même.
  • pour détecter le changement d'état (coché ou non), il faut écouter le changement de valeur de l'attribut value sur le treecell : cette valeur change à chaque fois que la case est cochée ou décochée.

Pour cela :

  • au chargement de la page, il faut ajouter un écouteur sur l'arbre :
function doLoad() {
    document.getElementById("tree_export").addEventListener("DOMAttrModified", doCheckboxModified, false);
}
  • et à chaque fois que l'attribut value d'un treecell est modifié, faire quelque chose :
function doCheckboxModified(event) {
     if ((event.target.localName == "treecell") && (event.attrName == "value")) {
            //attention si tu modifies l'attribut value sur une autre colonne
            //ceci sera exécuté, il faut peut-être améliorer les conditions selon les cas
            //(en utilisant l'id de la colonne par exemple)
            //
            //event.prevValue te donne l'état (true ou false) de la case à cocher avant modification
            //event.newValue te donne le nouvel état
            //
     }
}
  • l'attribut checked sur le treeitem et oncommand sur le treecell sont inutiles

J'espère que ça te permettra d'avancer un peu.
Vincent

# Re: oncommand sur une colonne de type checkbox

Envoyé par : Alexandre

Date : 19/11/2009 15:23

Je récupère en effet les évènements au niveau de l'arbre. Je m'en suis sorti en en utilisant l'évènement onClick et un objet de type treeBoxObject.

treeBoxObjet possède une méthode "getCellAt();" qui permet de récupérer la ligne, la colonne et l'élément fils du point cliqué.

A partir de cela, je peux déterminer si le "clic" a été fait dans la bonne colonne, et si c'est le cas, je peux récupérer l'état de la cellule cliquée "tree.view.getCellValue(row.value,col.value)".

Et le tour est joué.

Merci pour ta réponse, j'ai l'impression que l'utilisation d'un écouteur rend le code plus propre.

# Re: oncommand sur une colonne de type checkbox

Envoyé par : mistervince

Date : 20/11/2009 10:27

salut

Utiliser onclick permet de réagir uniquement au clic de l'utilisateur. Avec ma méthode, je pouvais en plus réagir quand l'état était changé par un script (ce dont j'avais besoin pour je ne sais plus quelle raison). Si tu n'as pas besoin de ça, ta méthode est tout à fait suffisante.

vincent

# Re: oncommand sur une colonne de type checkbox

Envoyé par : thefab

Date : 20/11/2009 23:07

J'ai un vague souvenir qui fallait forcer le fait que les évènements soient propagés dans une ligne du tree avec "allowevents"... Peut-être une piste...

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.