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

Bibliothèques & Frameworks Discussion :

DropOut after finish function [Prototype]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre habitué Avatar de Federico_muy_bien
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Points : 189
    Points
    189
    Par défaut DropOut after finish function
    Bien le boujour à vous tous !
    Encore une fois j'ai un petit soucis en JS.

    **EDIT (Simplification) ** :
    Je n'arrive pas a lancer une fonction aprés un effet dropOut. Il se lance avant. D'ou vient le probléme ?
    (Désolé je suis parti dans une grande explication, et je n'ai réalisé que aprés que le probléme était tout simple)



    Longue explication :
    J'utilise la fonction dropOut pour enlever une div de données d'une page "joliment".
    Mais je dois aussi supprimer ces données de la page HTML en brut. Donc je lance la fonction delete_data() dans le afterFinish qui fait un remove_child. Les données sont bien supprimées (c'est le plus important) mais il n'y a pas d'effet de dropOut.

    Si je ne lance pas la fonction dans le afterfinish, j'ai bien l'effet dropOut.
    De plus si la function est juste un alert, je me suis rendu compte que le alert() est lancé AVANT le dropOut ! re-

    Donc logique quand dans la fonction delete_condition je fais un remove_child de la div, l'effet ne peut plus s'exécuter sur cette div (puisqu'elle n'existe plus).
    J'ai trouvé sur le net que afterFinish pouvait poser probléme mais pas avec dropOut. Donc qu'est ce qu'il cloche ... ?

    Merci de m'aider.

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function delete_condition(obj){
    			while(obj.className != 'strain_display'){
    							obj = obj.parentNode;
    						}
    			document.getElementById('strain_added').removeChild(obj);
    		}

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <div id="strain_added">
    <div class="strain_display">
    <p style=\"text-align:right;margin:0\">
    	<a href=\"#\" onclick=\"Effect.DropOut($(this.parentNode.parentNode),{ afterFinish: delete_condition(this)});\">
    									<img src=\"../images/del.png\" alt=\"#\" /></a></p>
    </div>
    </div>

  2. #2
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Bonjour,
    l'explication est très simple: l'option afterFinish attend une fonction mais toi tu lui attribut le résultat de l'exécution d'une fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Effect.DropOut($(this.parentNode.parentNode),{ 
      afterFinish: delete_condition.curry(this)
    });
    la méthode curry de l'objet Function (ajoutée par le framework prototype) renvoie une nouvelle fonction dont les paramètres passés à curry sont prédéfinis dans la nouvelle fonction... pas clair ? essaye ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var add = function(a,b,c) {
      alert(a+b+c);
    }
     
    var addCurry1 = add.curry(1,2,3);
    alert("la fonction add n'a pas été éxécutée ");
    addCurry1();
     
    var addCurry2 = add.curry(1);
    alert("la fonction add n'a pas été éxécutée ");
    addCurry2(2,3);

  3. #3
    Membre habitué Avatar de Federico_muy_bien
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Points : 189
    Points
    189
    Par défaut
    Salut gwyohm !

    Alors merci c'est magnifique !! ça marche !
    Mais je t'avoue que c'est flou. En gros cette methode curry permet de stocker les valeurs d'un appel à une fonction.

    En gros si au lieu d'appeller delete_condition(), j'avais déclaré une fonction var e = fonction(){blabla} ça aurait marché.

    Merci beaucoup. Je n'ai jamais vu ce curry dans mes recherches.
    J'adore le curry !!!

  4. #4
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Citation Envoyé par Federico_muy_bien Voir le message

    En gros si au lieu d'appeller delete_condition(), j'avais déclaré une fonction var e = fonction(){blabla} ça aurait marché.
    oui, tu aurais pu faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    afterFinish:function() {/* du code */}
    A noter qu'il faut faire attention à this ; dans ta fonction anonyme, this n'aurait probablement pas été ce que tu attendais. du coup tu aurais probablement été obligé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    afterFinish:function() {delete_condition(this)}.bind(this)
    et dans ce cas, curry est plus pratique

  5. #5
    Membre habitué Avatar de Federico_muy_bien
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Points : 189
    Points
    189
    Par défaut
    Merci

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

Discussions similaires

  1. implicit declaration of function
    Par guillaume_pfr dans le forum C
    Réponses: 7
    Dernier message: 12/06/2003, 10h59
  2. [POSTGRESQL] exec function
    Par peuh dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/05/2003, 15h15
  3. A propos des 'File management Functions' de Windows
    Par znaidi dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2003, 16h01
  4. [postgreSQL] équivalent de la function 'instr'
    Par Dra_Gun dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2003, 16h09
  5. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37

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