RemoveEventListener de fonctionne pas [Résolu]

lamouchetsetse 47 Messages postés samedi 2 août 2014Date d'inscription 10 décembre 2017 Dernière intervention - 3 févr. 2016 à 00:36 - Dernière réponse : lamouchetsetse 47 Messages postés samedi 2 août 2014Date d'inscription 10 décembre 2017 Dernière intervention
- 4 févr. 2016 à 21:53
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.
Afficher la suite 

5 réponses

Répondre au sujet
@karamel 1649 Messages postés vendredi 9 mai 2008Date d'inscriptionModérateurStatut 9 décembre 2017 Dernière intervention - Modifié par kazma le 3/02/2016 à 21:05
+1
Utile
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 !
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de @karamel
lamouchetsetse 47 Messages postés samedi 2 août 2014Date d'inscription 10 décembre 2017 Dernière intervention - 3 févr. 2016 à 13:28
0
Utile
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.
Commenter la réponse de lamouchetsetse
lamouchetsetse 47 Messages postés samedi 2 août 2014Date d'inscription 10 décembre 2017 Dernière intervention - 3 févr. 2016 à 21:30
0
Utile
bonjour et merci de votre réponse. Effectivement sans () ça fonctionne, mais comment faire si je dois passer des paramètres à ma fonction test()
Commenter la réponse de lamouchetsetse
@karamel 1649 Messages postés vendredi 9 mai 2008Date d'inscriptionModérateurStatut 9 décembre 2017 Dernière intervention - 4 févr. 2016 à 15:50
0
Utile
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
Commenter la réponse de @karamel
lamouchetsetse 47 Messages postés samedi 2 août 2014Date d'inscription 10 décembre 2017 Dernière intervention - Modifié par lamouchetsetse le 4/02/2016 à 21:55
0
Utile
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()
Commenter la réponse de lamouchetsetse

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.