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 :

Fonction récursive avec objet en argument


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Points : 39
    Points
    39
    Par défaut Fonction récursive avec objet en argument
    Salut à toutes et à tous,

    Je me suis remis à la conception de sites Internet et je bloque sur un petit détail plutôt ennuyeux...

    En fait, mon but est d'adapter la fenêtre d'une IFRAME en fonction de son contenu. Rien de bien compliqué à ça, j'utilise une fonction Javascript qui va détecter la présence d'un DIV caché dans l'IFRAME (Ce DIV est toujours créée une fois que la page insérée dans l'IFRAME est totalement chargée).

    La fonction Javascript est lancée grace à l'onLoad de la page que je charge dans l'IFRAME, et est construite plus ou moins comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function adaptHeight(which)
    {
    	if (!which.document.getElementById("DONE"))
    	{
    		setTimeout("adaptHeight(" + which + ")", 20);
    	}
    	else
    	{
    		alert("Page loaded successfully");
    		return 1;
    	}
    }
    Et l'IFRAME:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <IFRAME src="loading.htm" onload="parent.adaptHeight(this);" scrolling="no" id="main" name="main">
    	<P>Your user agent does not support frames or is currently configured not to display frames.</P>
    </IFRAME>
    La fonction est appelée via le parent de l'IFRAME, puisque c'est dans le header du parent que je charge les fonctions Javascripts.

    Le problème maintenant:
    1. Quand la fonction est lancée la première fois, il 'y a aucun problème, la fonction est relancée car le DIV DONE n'est pas encore chargée.
    2. Quand la fonction est lancée une seconde fois, ça me met une erreur "Message: 'object' is undefined".

    Après quelques recherches, j'ai constaté que l'utilisation du setTimeout a transformé mon objet 'which'... en simple texte!!
    J'ai aussi utilisé la fonction arguments.callee, et là, ça marche niquel. Or, je ne veux pas faire appel à cette fonction. Et d'autre part, j'aimerais aussi comprendre ce qui ne va pas avec la fonction setTimeout.

    Quelqu'un aurait une idée ?

    Merci par avance,
    Mickaël

  2. #2
    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 : 53
    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
    setTimeout(function(){adaptHeight(which)}, 20);
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Points : 39
    Points
    39
    Par défaut
    Salut Bovino,

    Merci pour ta réponse qui marche à la perfection.

    Seulement, pourrais-tu m'expliquer pourquoi mon approche ne fonctionnait pas, et en quoi ton approche a rendu la fonction récursive possible?

    Mickaël

  4. #4
    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 : 53
    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
    Parce que ton paramètre whitch est un objet JavaScript, tu ne peux donc pas le concaténer à une chaine

    Ceci dit, si tu passes une chaine comme 1er argument de setTimeout, JavaScript lancera un eval() en interne, tu peux donc faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout("adaptHeight(which)", 20);
    qui marchera aussi (à condition que which soit bien préservé, ce que je n'ai jamais testé ), mais comme eval c'est pas bien, il est préférable d'utiliser une fonction anonyme
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Points : 39
    Points
    39
    Par défaut
    Superbe explication, à la fois courte, simple, conscise et précise!

    Encore merci,
    Mickaël

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

Discussions similaires

  1. Fonction récursive avec un paramètre en objet
    Par thor76160 dans le forum Langage
    Réponses: 4
    Dernier message: 23/08/2011, 08h46
  2. fonctions récursives et passage d'arguments
    Par Jasmine80 dans le forum Langage
    Réponses: 11
    Dernier message: 05/12/2008, 10h26
  3. Problème de fonction récursive avec un TcxDBTreeList
    Par isachat666 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 05/12/2005, 13h12
  4. Fonction callback avec arguments ?
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 39
    Dernier message: 07/11/2005, 10h41
  5. fonctions stockées avec une table en argument
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 08/10/2004, 23h17

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