Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Rebrancher l'évenement onmousemove après l'avoir débranché

Envoyé par : Christophe Charron

Date : 02/03/2006 22:13

Bonsoir, question à tiroir : soit un arbre

<tree id="arbre_des_docs" enableColumnDrag="true" flex="1" 
flags="dont-build-content" ref="urn:data:row" datasources="null"        onmousemove="pf_survol(event);">

soit un bout de script qui arrête la scrutation de "onmousemove" dans une certaine situation

tree.onmousemove=""

soit une tentative de reactivation avec ce bout de script :

tree.onmousemove="pf_survol(event);"

qui bien evidemment ne donne pas le résultat escompté. J'ai peur qu'il me faille réactiver l'évenement sur tous les sous-objets du tree (boxObject etc...) et je ne sais pas comment m'y prendre.

function pf_survol(event)
{
 var row = {}, column = {}, part = {};
 var boxobject = tree.boxObject;
 boxobject.QueryInterface(Components.interfaces.nsITreeBoxObject);
 boxobject.getCellAt(event.clientX, event.clientY, row, column,  part);
 if(row.value == -1){
   return;
 }
 document.getElementById("tb_emplacement").value =  tree.view.getCellText(  row.value,tree.columns.getNamedColumn("emplacement") );
 document.getElementById("tb_titre").value = tree.view.getCellText(  row.value,tree.columns.getNamedColumn("titre") );
 document.getElementById("tb_blocnotebrut").value =  tree.view.getCellText( row.value  ,tree.columns.getNamedColumn("blocnotebrut") );
 document.getElementById("la_dateheurecreation").value =  tree.view.getCellText(  row.value,tree.columns.getNamedColumn("dateheurecreation") );
 document.getElementById("la_dateheuremodif").value =  tree.view.getCellText(  row.value,tree.columns.getNamedColumn("dateheuremodif") );
}

Bon, bien sûr plutôt que de débracher l'évènement, je peux gérer un drapeau et sortir de la fonction immédiatement si il est positionné mais bon ... déjà que mon code, du fait de mon inexpérience n'est pas joli, joli alors si je pouvais éviter d'en rajouter une couche ...

Le tiroir de la question étant : en observant l'inspecteur DOM, après avoir arrêté la scrutation, je vois toujours l'association "tree" "onmousemove" et "pf_survol(event)" Est-ce normal ? Je m'attendais à ce que ce soit une vision dynamique ??

Cordialement Christophe Charron

# Re: Rebrancher l'évenement onmousemove après l'avoir débranché

Envoyé par : laurentj

Date : 03/03/2006 12:05

plutôt que de spécifier tes gestionnaires d'évenements via un attribut, spécifie les par l'api DOM event : addEventListener &co. C'est plus puissant, voir plus propre.

Cependant, tu as un problème : tu confond attributs (donc on specifie le contenu dans une chaine), et propriétés d'objets (pour lesquelles on spécifie les valeurs avec le bon type)

En l'occurence, faire un

 <tree ... onmousemove="foo()" />

N'est pas du tout pareil que

 myTree.onmousemove="foo()";

Dans le premier cas, tu as un attribut, dans le deuxième cas, tu manipule une propriété d'un objet : il faut donc te renseigner, quand tu manipule une propriété, quel est le type attendu. Et ici, c'est une fonction si je ne me trompe pas

 myTree.onmousemove= function(){ foo(); }

Attention, ne pas faire

 myTree.onmousemove= foo();

Car alors onmousemove n'est pas liée à la fonction foo(), mais reçoit directement le résultat de foo(), puisque là il s'agit d'un appel à la fonction foo().

# Re: Rebrancher l'évenement onmousemove après l'avoir débranché

Envoyé par : Christophe Charron

Date : 03/03/2006 16:27

Merci pour toutes ces précisions. D'habitude, je ne me laisse pas "traiter" et je n'admets pas que l'on me dise que j'ai un problème ... mais comme tu as tout a fait raison, je t'autorise même à me taper dessus si je repose une 3° fois ce genre de question !! En effet, je confusionnais grave entre "attribut" et sa grammaire propre et "propriété" et sa grammaire propre. Promis, je pense qu'avant de poser une prochaine question je vérifierai !! Je comptais, et je compte toujours d'ailleurs, utiliser addEventListener & co pour faire plus propre surtout pour regrouper dans une fonction contextuelle d'initialisation toutes ces petites facéties mais, de ce que j'ai lu, je n'arrive à scruter "onmousemove" par exemple pour 2 objets de la fenêtre, et uniquement 2 sur les quarante douze mille, et que pour chacun d'eux, je pointe vers une distincte fonction, plutôt que vers une unique fonction dans laquelle je traiterais par switches ...

Merci encore pour ta patience.

Amicalement Christophe

# Re: Rebrancher l'évenement onmousemove après l'avoir débranché

Envoyé par : laurentj

Date : 03/03/2006 17:21

D'habitude, je ne me laisse pas "traiter" et je n'admets pas que l'on me dise que j'ai un problème .

désolé, j'ai en effet mal formulé ma phrase. Je voulais dire : tu as un problème dans ton code. ;-) (mais pas sous entendu, dans ta tête ou ailleurs :-) )

# Re: Rebrancher l'évenement onmousemove après l'avoir débranché

Envoyé par : Christophe Charron

Date : 03/03/2006 18:41

non, non, tu avais raison de dire que j'avais un problème de compréhension !!

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.