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 avec plusieurs instances


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Par défaut Fonction avec plusieurs instances
    Bonjour,

    Je patine sur une fonction JS pour generer des calendriers.
    Tout fonctionne bien jusqu'au moment ou j'ai plus d'une instance. La, quand je change le mois sur ma premiere instance, c'est la deuxieme instance qui change.
    Je ne comprends pas bien la facon dont je dois construire ma fonction.

    Pouvez-vous me dire ce qu'il faut faire pour que les methodes appelees depuis la fonction s'appliquent uniquement a l'instance concernée?

    Ci-apres un petit extract de la facon dont ma fonction est construite (je vous épargne l'intégralité du code qui fait 500 lignes).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function calendar(FieldId)
    {
    	var me = this;
    	me.SelectedDays = Array();
    	//etc
     
    	GoNextMonth = function(){
    	//blabla
    	}
    	me.NextMonthButton = document.createElement('div');
    	me.NextMonthButton.onclick=GoNextMonth();
    }
    PS: J'emploie le mot instance, mais ma fonction est une fonction, pas une classe (je l'appelle par calendar('test'), pas par new calendar('test'))...


    Merci!

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 89
    Par défaut
    Il nous faudrait le code de la fonction GoNextMonth() et le code qui utilise le paramètre FieldId pour pouvoir chercher d'où vient le problème.
    Si le code est vraiment trop long, un page de test en ligne fera très bien l'affaire !

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 89
    Par défaut
    Voilà c'est mieux

    Dans les fonction GoNextMonth (et toutes les autres du même style d'ailleurs), tu utilises la variable "me". Or, "me" est hors contexte : elle est récupérée de la fonction calendar() et a comme valeur le dernier calendrier créé.
    Pour que le script fonctionne il faut remplacer tous les "me" par des "this" dans toutes les fonctions utilisées comme des évènements. Un autre problème vient alors : le "this" ne pointe pas sur le calendrier, mais sur l'objet sur lequel s'est passé l'évènement. Il faut donc que tu trouve un moyen, à partir de cet objet, de retrouver le calendrier auquel il appartient .

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Par défaut
    Merci de ta réponse rapide Julien!

    Alors j'ai mis des this partout, mais ca ne fonctionne toujours pas.
    Cette fois les fonctions ne paraissent fonctionner que lorsqu'elles sont appelees depuis l'extérieur.
    Je sais que j'ai merdouillé dans le code mais je ne vois pas ou.

    Les this qui etaient a l'origine dans certaines fonctions ont ete remplaces par des "thasse"... Je vais changer ca dans l'ensemble des fonctions mais je veux verifier d'abord que this.GoOver et this.GoOut fonctionnent. (J'ai rajoute un argument dans ces fonctions et remplace thasse par la reference a l'objet correspondant).

    Merci encore!

  6. #6
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Par défaut
    Euh, si tu n'instancie pas d'objet, ton this se réfère à window, c'est pas forcément ce que tu veux faire, c'est pas forcement utile et en plus ça balance pleins de référence dans le scope global

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Par défaut Encore une petite erreur
    J'ai donc encore deux problemes.
    Je vous remercie si vous pouvez m'aider.

    Dans http://www.babna.com/cal/, si on fait apparaitre un des deux calendriers, et qu'on va jusqu'en Décembre 2007 (le premier a avoir 6 lignes), la derniere ligne du calendrier ne disparait pas lorsqu'on va sur le mois suivant ou précédent.

    Dans ma fonction paint(), je fais pourtant

    me.cal.innerHTML = '';

    Et j'avais aussi essayé

    me.cal.length=0;

    avec le meme probleme.

    L'autre probleme est avec le bouton du calendrier, qui est cense faire apparaitre ET disparaitre le calendrier.

    J'utilise la fonction suivante:
    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
     
    	me.ShowHide = function()
    	{
    		if (  me.cal != null )
    		{
    			if ( me.cal.style.display != 'none' )
    			{
    				alert(me.cal.style.display);
    				me.cal.style.display = 'none';
    			}
    			else
    			{
    				me.cal.style.display = 'block';
    			}
    		}
    		else
    		{
    			me.paint();
    		}
    	}
    J'ai mis un alert() afin de vérifier qu'il reconnait bien ce que je lui demande, ce qui est le cas, mais une fois qu'un des mois ou annees a été cliqué (donc que la fonction paint() a été rappelée, au lieu de le faire disparaitre, il va au mois précédent...

    Merci de votre aide!

    Thomas

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Par défaut
    En fait, je crois que ces probleme viennent du fait que ma fonction paint() fait apparaitre une nouvelle instance a chaque fois, mais je ne comprends pas pourquoi ni comment.

    Une idee?

    Merci

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Par défaut
    J'ai toujours un problee, mais different cette fois: le DIV est recréé a chaque fois que j'utilise la methode Paint:

    http://www.babna.com/cal/

    Qqun peut-il m'aider?

    Merci!

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Par défaut
    C'est bon, je supprime le DIV avec removeChild a chaque fois que j'appelle Paint.
    Tout est ok...

    Merci de votre aide quand meme!

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

Discussions similaires

  1. Appel d'une fonction avec plusieurs variables
    Par midoparis dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/05/2008, 11h53
  2. Aide pour déclarer fonction avec plusieurs paramètres de sortie
    Par tonioj41 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/01/2008, 11h06
  3. [SQL2000]Accès serveur avec plusieurs instances
    Par SLE dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/01/2008, 21h26
  4. [Système] Fonction avec plusieurs paramètres optionnels
    Par cerede2000 dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2007, 14h36
  5. Réponses: 2
    Dernier message: 26/10/2006, 10h13

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