11548 sujets
Difficile de les supprimer, les fonctions attachées aux évènements sont générées dynamiquement donc, de se fait, anonyme
Je gères moi-même la compatibilité. Au niveau du code, je définies moi-même addEventListener si cette fonction n'existent pas. Ainsi, le jour où IE gèrera addEventListener, il n'y aura strictement rien à modifier.
Ca permet en prime de garder une programmation objet plus propre.

Je gères moi-même la compatibilité. Au niveau du code, je définies moi-même addEventListener si cette fonction n'existent pas. Ainsi, le jour où IE gèrera addEventListener, il n'y aura strictement rien à modifier.
Ca permet en prime de garder une programmation objet plus propre.
Accessoirement il y a des choses qui sont très bien gérées
http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
Gatsu35 a écrit :
Accessoirement il y a des choses qui sont très bien gérées
http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
Bof... Même l'auteur de ces fonctions, John Resig, déconseille de les utiliser :
a écrit :
I don't really recommend that anyone actually try and use that function.
Pour la question d'origine, je ne crois pas que tu puisses supprimer les gestionnaires d'événements si tu n'as plus de références vers les fonctions.
Modifié par Julien Royer (12 Jul 2007 - 14:29)
lu',
Concernant la fonction addEvent de Quirksmode, tout dépend de ce qu'on cherche ; on peut parfaitement s'en passer sans qu'on ait à considérer cela comme moins propre...
Pour cloneNode, il n'y a pas 36000 solutions... Soit on lance la méthode avant d'affecter un gestionnaire sur l'élément à cloner, soit on désactive le gestionnaire.
On peut très bien faire une référence vers une fonction nommée...
exemple:
Modifié par koala64 (12 Jul 2007 - 15:28)
Concernant la fonction addEvent de Quirksmode, tout dépend de ce qu'on cherche ; on peut parfaitement s'en passer sans qu'on ait à considérer cela comme moins propre...
Pour cloneNode, il n'y a pas 36000 solutions... Soit on lance la méthode avant d'affecter un gestionnaire sur l'élément à cloner, soit on désactive le gestionnaire.
MacIntoc a écrit :Je ne saisis pas ce que tu veux dire...
Difficile de les supprimer, les fonctions attachées aux évènements sont générées dynamiquement donc, de se fait, anonyme![]()

exemple:
var oO =
{
'message': 'coucou',
connect: function(oElem, sEvType, fn, bCapture)
{
return document.addEventListener ?
oElem.addEventListener(sEvType, fn, bCapture):
oElem.attachEvent ?
oElem.attachEvent('on' + sEvType, fn):
false;
},
init: function()
{
return oO.connect(window, 'load', oO.show, false);
},
show: function()
{
return oO.alerte(oO['message']);
},
alerte: function(msg)
{
return alert(msg);
}
};
oO.connect(window, 'load', oO.init, false);
Je n'ai aucune fonction anonyme là-dedans... Modifié par koala64 (12 Jul 2007 - 15:28)
Julien Royer>C'est bien ce qu'il me semble aussi
koala64>C'est justement un évènement posé sur l'élément à cloner qui déclenche son clonage. Donc difficile de cloner l'élément avant de poser l'évènement si je pose pas l'évènement qui lance son clonage
Concernant la génération des fonctions, j'utilise plutôt un truc du genre :
Modifié par MacIntoc (12 Jul 2007 - 16:07)

koala64>C'est justement un évènement posé sur l'élément à cloner qui déclenche son clonage. Donc difficile de cloner l'élément avant de poser l'évènement si je pose pas l'évènement qui lance son clonage

Concernant la génération des fonctions, j'utilise plutôt un truc du genre :
var f1=function(element){
...
...
...
}
var f2=function(element){
...
...
...
}
var setEvent=function(evt, fonction){
this.attachEvent(evt, function(){fonction(event.srcElement.parentNode.parentNode)});
}
var setmode=function(condition){
if(!element.setEvent) element.setEvent=setEvent;
element.setEvent(evt, condition?f1:f2);
}
Modifié par MacIntoc (12 Jul 2007 - 16:07)
Raison de plus pour nommer explicitement le gestionnaire de manière à pouvoir le désactiver sur le clone. (via removeEventListener et detachEvent)
Par exemple, tu remplaces :
par :
Par exemple, tu remplaces :
this.attachEvent(evt, function(){fonction(event.srcElement.parentNode.parentNode)});
par :
this.attachEvent(evt, affecte);
var affecte = function()
{
return fonction(event.srcElement.parentNode.parentNode);
};
En fait, il y a une coquille avec cette solution.
C'est dans f1 et f2 que le clonage, et donc la suppression de l'évènement, intervient.
Si je définis affecte à l'extérieur de setEvent, f1 et f2 perdent la valeur de la variable fonction définie dans setEvent puisque la variable fonction est détruite a la fin de l'exécution de setEvent.
Si je définis affecte a l'intèrieur de setEvent, IE perd this lors de l'exécution de f1 ou f2 puisque affecte est détruit à la fin de l'exécution de setEvent.
En revanche, en stockant les fonctions attaché à l'évènement dans l'objet DOM représentant la balise, je pourrais tout récupérer à tous moments. Ce qui m'embêtes, c'est que je trouves pas ça super propre. J'essaierais demain pour vérifier que ça fonctionne bien.
C'est dans f1 et f2 que le clonage, et donc la suppression de l'évènement, intervient.
Si je définis affecte à l'extérieur de setEvent, f1 et f2 perdent la valeur de la variable fonction définie dans setEvent puisque la variable fonction est détruite a la fin de l'exécution de setEvent.
Si je définis affecte a l'intèrieur de setEvent, IE perd this lors de l'exécution de f1 ou f2 puisque affecte est détruit à la fin de l'exécution de setEvent.
En revanche, en stockant les fonctions attaché à l'évènement dans l'objet DOM représentant la balise, je pourrais tout récupérer à tous moments. Ce qui m'embêtes, c'est que je trouves pas ça super propre. J'essaierais demain pour vérifier que ça fonctionne bien.