RemoveEventListener de fonctionne pas [Résolu]

Signaler
Messages postés
91
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
14 janvier 2021
-
Messages postés
91
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
14 janvier 2021
-
bonjour à tous,

je commence par un peut de code pour illustrer mon problème:

<html>
    <p id="p">test</p>
</html>


var p = document.getElementById('p');
 
function test()
{
   return function(e)
   {
       e.preventDefault();
       alert('test');
       p.removeEventListener('click', test(), false);
        
       p.onclick = function(e)
       {
               e.preventDefault();
                
               alert('test2');
                
               p.innerHTML = 'teeeeest3';
               p.onclick = function(e){};
               p.addEventListener('click', test(), false);
       };
        
       p.innerHTML = 'testtttt2';
   }
}
 
p.addEventListener('click', test(), false);


la ligne suivante ne fonctionne pas:

p.removeEventListener('click', test(), false);

je pense que ça vient du fait que l'annulation de l’évènement à lieux dans la fonction de l’évènement.

dans ce cas comment annulé "p.addEventListener('click', test(), false);" sachant que je veux l'annuler uniquement si l’évènement à été déclenché?

j'ai bien pensé a créer un variable test qui vaut true si déclenchée puis réinitialisée sur false pour que l’évènement ce déclenche à nouveau mais je trouve que ça fait un peu usine à gaz du coup si une solution existe avec removeEventListener ou autre ça m'arrangerais bien.

Merci à vous.
A voir également:

5 réponses

Messages postés
1787
Date d'inscription
vendredi 9 mai 2008
Statut
Non membre
Dernière intervention
9 juin 2021
131
bonjour

il ne faut pas mettre les parenthèses de la fonction

p.addEventListener('click', test, false);


rien ne sert de courir il faut partir a point.
cours Forest cours !
Messages postés
91
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
14 janvier 2021

bonjour à tous,
comme j'ai peu être pas été très claire je réexplique ce que je cherche à faire.

En claire, l'effet que je cherche à produire est le suivant:

1)_ déclenchement de la fonction test() lors du click. (ligne 26)

_ suppression de l’évènement associer à la fonction test() pour ne pas qu'il se déclenche au prochain click avec removeEventListener (ligne 9)

2)_ déclenchement de p.onclick. (ligne 11)

_ suppression de l’évènement p.onclick pour ne pas qu'il se déclenche au prochain click. (p.onclick = function(){}; ligne 18)

_ réamorser le 1er evenement associer à la fonction test() pour qu'il se déclanche à nouveau au prochain click. (p.addEventListener('click', test(), false); ligne 19)

Du coup je sais que ça fait beaucoup de déclencheur sur le même élément c'est pourquoi je souhaite les supprimer à mesure qu'ils sont déclenchés, afin que le code fonctionne en boucle.
Messages postés
91
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
14 janvier 2021

bonjour et merci de votre réponse. Effectivement sans () ça fonctionne, mais comment faire si je dois passer des paramètres à ma fonction test()
Messages postés
1787
Date d'inscription
vendredi 9 mai 2008
Statut
Non membre
Dernière intervention
9 juin 2021
131
poiur ajouter des parametres on utilise une fonction annonyme mais le probleme c'est que on ne peut pas supprimer une fonction annonyme avec removeEventListener mais dans tons cas utilse plutot onclick a chaque fois que tu fera

p.onclick=function(e){du code}


tu écrasera l’ancien onclick qui sera remplacé le nouveau

addEventListener n'est utile qui si tu a plusieurs fonction a executer pour le meme evenement et que tu veuille supprimer q'une seule de ces fonction
Messages postés
91
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
14 janvier 2021

ok merci, j'ai trouvé cette solution pour pouvoir passer des paramètres à ma fonction tout en utilisant removeEventListener:

var p = document.getElementById('p');
  
 
function test(test2)
{
    alert(test2);
    p.removeEventListener('click', varFunc, false)
}
 
var varFunc = function(e)
{
    e.preventDefault();
    test('test');

};
  
p.addEventListener('click', varFunc, false);


on peu aussi mettre le removeEventListener ligne 14 apres avoir appeler la fonction test()