Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

removeEventListener

4 réponses
Avatar
WebShaker
Salut j'ai un code dans ce genre

oNewCard.addEventListener('click', function( event )
{
// 100 ligne de code
}, false );


Comment faire pour supprimer le listener ?
je vais quand meme pas appeler
oNewCard.removeEventListener('click', function( event )
{
// 100 ligne de code
}, false );

avec mes 100 lignes de code !!!

Merci
Etienne

4 réponses

Avatar
Mickaël Wolff
Le 01/05/2010 18:29, WebShaker a écrit :
avec mes 100 lignes de code !!!



Ça ne marchera pas car ce ne sera pas le même objet. Le second
paramètre de addEventListener et removeEventListener sont un objet. Et
effectivement, en Javascript, une fonction est un objet.

Tu dois sauvegarder l'objet fonction pour pouvoir le supprimer plus tard.

var callback = function (/* … */) { /* … */ }
o.addEventListener('hop', callback, false) ;
/* … */
o.removeEventListener('hop', callback, false) ;

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
WebShaker
Le 01/05/2010 19:44, Mickaël Wolff a écrit :
Ça ne marchera pas car ce ne sera pas le même objet. Le second paramètre
de addEventListener et removeEventListener sont un objet. Et
effectivement, en Javascript, une fonction est un objet.



Dans mon cas j'avais surtout besoin que mon evenement ne se déclanche
qu'un seule fois.
j'ai trouvé ca sur internet.

this.removeEventListener('click', arguments.callee, false);

en gros faut mettre ca dans le code de l'event et ca l'auto supprime

ca donne
oNewCard.removeEventListener('click', function( event )
{
// 100 ligne de code
this.removeEventListener('click', arguments.callee, false);
}, false );

et voila mon evenement ne sera executé qu'une seul fois.

Etienne
Avatar
Mickaël Wolff
Le 02/05/2010 21:53, WebShaker a écrit :
Le 01/05/2010 19:44, Mickaël Wolff a écrit :
Ça ne marchera pas car ce ne sera pas le même objet. Le second paramètre
de addEventListener et removeEventListener sont un objet. Et
effectivement, en Javascript, une fonction est un objet.



Dans mon cas j'avais surtout besoin que mon evenement ne se déclanche
qu'un seule fois.
j'ai trouvé ca sur internet.

this.removeEventListener('click', arguments.callee, false);

en gros faut mettre ca dans le code de l'event et ca l'auto supprime

ca donne
oNewCard.removeEventListener('click', function( event )
{
// 100 ligne de code
this.removeEventListener('click', arguments.callee, false);
}, false );

et voila mon evenement ne sera executé qu'une seul fois.



Malheureusement, arguments.callee est déconseillé et ne devrait plus
être utilisé. Mais je ne connais pas d'équivalent.

Ceci dit, définir un élément en one shot n'a pas quand' intérêt quand
on fait de la programmation événementielle.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
WebShaker
Le 02/05/2010 22:28, Mickaël Wolff a écrit :
Malheureusement, arguments.callee est déconseillé et ne devrait plus
être utilisé. Mais je ne connais pas d'équivalent.



Ben dans certain cas si ca peut être utile.
Surtout en HTML5.

je te donne un exemple:
tu décides d'utiliser par exemple l'effet de transition et tu veux faire
quelque chose en fin de transition.
ce quelques chose est exécuté lors du déclenchement de webkitTransitonEnd.
et la tu peut vouloir faire quelque chose de particulier lié uniquement
a cette transition.

voila.
m'enfin j'ai plein d'autre cas !

Etienne