IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Supprimer un evenement


Sujet :

JavaScript

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 101
    Points : 49
    Points
    49
    Par défaut Supprimer un evenement
    Bonjour,

    J'ai un problème en javascript au sujet des évenements. J'assigne des evènements à des objets grâce à cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function addEvent(obj,event,fct){
         if(obj.attachEvent)
            obj.attachEvent('on' + event,fct);
         else
            obj.addEventListener(event,fct,true);
    }
    Dans mon cas je crée un évenement comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addEvent(onglet,"mouseout",function (){onglet.style.backgroundImage='url(../../images/bouton_on.png)'; onglet.style.cursor='normal';});


    Maintenant à un moment je ne veux plus cet évènement mais le supprimer. J'ai essayé plusieurs solution mais ça na pas marché.

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addEvent(onglet,"mouseout",function (){void(0);});

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Habituellement, ce type de fonction est accompagné d'une autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function removeEvent(obj,event,fct){
        if (obj.detachEvent) {
            obj.detachEvent("on" + event, fct);
        }
        else {
            obj.removeEventListener(event, fct, true);
        }
    }

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    arf add ....
    = ajout

    donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function removeEvent(obj,event){
    obj.event=function(){void(0);};
    }

    reste à savoir si tu cherche à supprimer juste une fonction ou carrément l'évènement entier.

    La solution de Beef est plus selective ^^

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Par contre, l'utilisation de fonction anonyme avec addEvent/removeEvent empêche de supprimer la fonction associée, il est nécessaire de nommer les fonctions pour pouvoir ensuite les supprimer.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    function addEvent(obj,event,fct){
         if(obj.attachEvent)
            obj.attachEvent('on' + event,fct);
         else
            obj.addEventListener(event,fct,true);
    }
     
    function removeEvent(obj,event,fct){
        if (obj.detachEvent) {
            obj.detachEvent("on" + event, fct);
        }
        else {
            obj.removeEventListener(event, fct, true);
        }
    }
     
    function toto()
    {
        alert("toto");
    }
     
    /* Pour ajouter la fonction à l'événement */
    addEvent(onglet,"mouseout",toto);
     
    /* Pour supprimer la fonction à l'événement */
    removeEvent(onglet,"mouseout",toto);
    @SpaceFrog
    function removeEvent(obj,event){
    obj.event=function(){void(0);};
    }
    Comment ça marche ?

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par BaBeuH Voir le message
    Par contre, l'utilisation de fonction anonyme avec addEvent/removeEvent empêche de supprimer la fonction associée
    Non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function addEvent(obj,event,fct){
         if(obj.attachEvent)
            obj.attachEvent('on' + event,fct);
         else
            obj.addEventListener(event,fct,true);
    }
     
    function removeEvent(obj,event,fct){
        if (obj.detachEvent) {
            obj.detachEvent("on" + event, fct);
        }
        else {
            obj.removeEventListener(event, fct, true);
        }
    }
     
    /* Pour ajouter la fonction à l'événement */
    addEvent(onglet,"mouseout",function(){alert('toto');});
     
    /* Pour supprimer la fonction à l'événement */
    removeEvent(onglet,"mouseout",function(){alert('toto');});
    Fonctionne aussi, le seul impératif est que ce 3e paramètre soit identique dans le add et dans le remove

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 101
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function addEvent(obj,event,fct){
         if(obj.attachEvent)
            obj.attachEvent('on' + event,fct);
         else
            obj.addEventListener(event,fct,true);
    }
     
    function removeEvent(obj,event,fct){
        if (obj.detachEvent) {
            obj.detachEvent("on" + event, fct);
        }
        else {
            obj.removeEventListener(event, fct, true);
        }
    }
     
    /* Pour ajouter la fonction à l'événement */
    addEvent(onglet,"mouseout",function(){alert('toto');});
     
    /* Pour supprimer la fonction à l'événement */
    removeEvent(onglet,"mouseout",function(){alert('toto');});
    Fonctionne aussi, le seul impératif est que ce 3e paramètre soit identique dans le add et dans le remove
    Malheureusement ça ne fonctionne pas, ça créé l'evenement mais ne le supprime pas.

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 101
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par BaBeuH Voir le message
    Par contre, l'utilisation de fonction anonyme avec addEvent/removeEvent empêche de supprimer la fonction associée, il est nécessaire de nommer les fonctions pour pouvoir ensuite les supprimer.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    function addEvent(obj,event,fct){
         if(obj.attachEvent)
            obj.attachEvent('on' + event,fct);
         else
            obj.addEventListener(event,fct,true);
    }
     
    function removeEvent(obj,event,fct){
        if (obj.detachEvent) {
            obj.detachEvent("on" + event, fct);
        }
        else {
            obj.removeEventListener(event, fct, true);
        }
    }
     
    function toto()
    {
        alert("toto");
    }
     
    /* Pour ajouter la fonction à l'événement */
    addEvent(onglet,"mouseout",toto);
     
    /* Pour supprimer la fonction à l'événement */
    removeEvent(onglet,"mouseout",toto);
    @SpaceFrog


    Comment ça marche ?
    Je ne sais pas pourquoi mais l'evenement ne se créé pas

    edit : si mais par contre si on veux créé une fonction de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function toto(test)
    {
        alert(test);
    }
    Comment on crée l'evenement? car addEvent(onglet,"mouseout",toto(1)); ne marche pas

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addEvent(onglet,"mouseout",function(){alert('toto');});
    Tu as mis quoi à la place de "onglet"

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 101
    Points : 49
    Points
    49
    Par défaut
    onglet c'est mon objet. Mais la création de l'evenement ça marche, c'est la suppression qui ne fonctionne pas.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function addEvent(obj,event,fct){
         if(obj.attachEvent)
            obj.attachEvent('on' + event,fct);
         else
            obj.addEventListener(event,fct,true);
    }
     
    function removeEvent(obj,event,fct){
        if (obj.detachEvent) {
            obj.detachEvent("on" + event, fct);
        }
        else {
            obj.removeEventListener(event, fct, true);
        }
    }
     
    /* Pour ajouter la fonction à l'événement */
    addEvent(onglet,"mouseout",function(){alert('toto');});
     
    /* Pour supprimer la fonction à l'événement */
    removeEvent(onglet,"mouseout",function(){alert('toto');});
    Fonctionne aussi, le seul impératif est que ce 3e paramètre soit identique dans le add et dans le remove
    tu es sûr ? J'ai fait un test justement avant de poster et ça ne marchait pas de supprimer via la même fonction anonyme...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <html>
    	<head>
    		<script type="text/javascript">
    			function addEvent(obj,event,fct){
    			     if(obj.attachEvent)
    			        obj.attachEvent('on' + event,fct);
    			     else
    			        obj.addEventListener(event,fct,true);
    			}
     
    			function removeEvent(obj,event,fct){
    			    if (obj.detachEvent) {
    			        obj.detachEvent("on" + event, fct);
    			    }
    			    else {
    			        obj.removeEventListener(event, fct, true);
    			    }
    			}
     
    			function toto(){ alert("toto");}
     
    			addEvent(window,"load",function(){
     
    				addEvent(document.getElementById("enableClick"),"click",function(){
    					addEvent(document.getElementById("divTest"),"click",toto);
    				});
     
    				addEvent(document.getElementById("disableClick"),"click",function(){
    					removeEvent(document.getElementById("divTest"),"click",toto);
    				});
     
    				addEvent(document.getElementById("enableClickanonyme"),"click",function(){
    					addEvent(document.getElementById("divTestAnonyme"),"click",function(){alert("toto");});
    				});
     
    				addEvent(document.getElementById("disableClickanonyme"),"click",function(){
    					removeEvent(document.getElementById("divTestAnonyme"),"click",function(){alert("toto");});
    				});
    			});
    		</script>
    	</head>
    	<body>
    		<input type="button" value="active click nom" id="enableClick" />
    		<input type="button" value="desactive click nom" id="disableClick" />
     
    		<input type="button" value="active click anonyme" id="enableClickanonyme" />
    		<input type="button" value="desactive click anonyme" id="disableClickanonyme" />
    		<div id="divTest" style="text-align: center; width: 150px;margin: 10px; border: 1px blue solid">TOTO nom</div>
    		<div id="divTestAnonyme" style="text-align: center; width: 150px;margin: 10px; border: 1px blue solid">TOTO Anonyme</div>
    	</body>
    </html>

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par BaBeuH Voir le message
    tu es sûr ? J'ai fait un test justement avant de poster et ça ne marchait pas de supprimer via la même fonction anonyme...
    Nom de Zeus !!!
    Tu as effectivement raison
    J'avais gardé cette habitude pour décharger mes gestionnaires car j'étais persuadé que ça fonctionnait, mais ce n'est pas le cas...

    Au temps pour moi alors et bien vu

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    En peaufinant un peu mon idée précédente, voici ce que ça donnerait.
    Mais ici avec destruction totale du contenu de l'evenement, pas sélectif sur une focntion ajoutée...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>Nouvelle page 1</title>
    <script type="text/javascript">
    function ajout(obj,evt,fct){
    obj[evt]=fct
    }
     
    function suppr(obj,evt){
    obj[evt]=function(){void(0)}
    }
     
    function foo(){alert('coucou')}
    </script>
    </head>
    <body>
    <input type="button" onclick="ajout(this,'onmouseover',foo)" value='add' id="bar"/>
    <input type="button" onclick="suppr(document.getElementById('bar'),'onmouseover')" value='remove' />
    </body>
    </html>

  14. #14
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 101
    Points : 49
    Points
    49
    Par défaut
    Bon j'ai réussi à le faire fonctionner mais sans les méthodes anonymes. Merci pour votre aide qui m'a été précieuse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer un evenement
    Par bnohit dans le forum jQuery
    Réponses: 2
    Dernier message: 31/05/2011, 23h21
  2. supprimer evenement onclick => detachEvent gadget pour sidebar
    Par calitom dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/01/2009, 14h50
  3. Comment supprimer un evenement plus utilisé?
    Par badack dans le forum NetBeans
    Réponses: 2
    Dernier message: 21/04/2008, 14h13
  4. [NetBeans] Supprimer un evenement
    Par scifire dans le forum NetBeans
    Réponses: 4
    Dernier message: 14/02/2006, 23h10
  5. Evenement pour caractere ajouté ou supprimé dans un input ?
    Par Jerem' dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/02/2005, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo