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 :

transmission d'arguments surchargés à une sous fonction


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 21
    Par défaut transmission d'arguments surchargés à une sous fonction
    Bonjour,

    J'essaye en vain de transmettre des arguments surchargés à une sous fonction (elle même passé en argument).
    J'ai bien compris les erreurs de toutes mes différentes techniques mais je ne connais pas la solution...
    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
    function name2obj(name, fonction)//execute la 'fonction' avec ses argument eventuels (à passer en surcharge) sur tous les objets 'name'
    {
    	//technique 1 : fail
    	for (i=0; i<document.getElementsByName(name).length; i++) fonction(document.getElementsByName(name)[i], name2obj.arguments.splice(0,2));
     
    	//technique 2 : fail
    	for (i=0; i<document.getElementsByName(name).length; i++)
    	{
    		fonction.arguments[0] = document.getElementsByName(name)[i];
    		for (j=2; j<name2obj.arguments.length; j++) fonction.arguments[j-1] = name2obj.arguments[j];
    		fonction();
    	}
     
    	//technique 3 : fail
    	for (i=0; i<document.getElementsByName(name).length; i++)
    	{
    		for (j=2; j<name2obj.arguments.length; j++) arg += ', '+name2obj.arguments[j];
    		var func = fonction(document.getElementsByName(name)[i]+arg);
    		funct();
    	}
     
    	//technique 4 : fail
    	for (i=0; i<document.getElementsByName(name).length; i++)
    	{
    		var func = 'fonction('+document.getElementsByName(name)[i];
    		for (j=2; j<name2obj.arguments.length; j++) func += ', '+name2obj.arguments[j];
    		func += ')';
    		eval(func);
    	}
     
    	//technique 5 : fail
    	for (i=0; i<document.getElementsByName(name).length; i++) fonction(function ()
    									{
    										var arg = '';
    										arg += document.getElementsByName(name)[i];
    										for (j=2; j<name2obj.arguments.length; j++) arg += ', '+name2obj.arguments[j];
    										return arg;
    										});
     
    	//technique 6 : fail
    	for (i=0; i<document.getElementsByName(name).length; i++)
    	{
    		var arg = '';
    		arg += document.getElementsByName(name)[i];
    		for (j=2; j<name2obj.arguments.length; j++) arg += ', '+name2obj.arguments[j];
    		fonction(arg);
    	}
    }//ex d'appel : name2obj(cible, switchClassName, classname1, classname2);
    Merci de m'aider

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 21
    Par défaut
    En clair j'essaye de faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function fonction1(a)
    {
    	a(b, c);
    }
     
    function fonction2(b, c)
    {
    	alert(b);
    	alert(c);
    }
     
    fonction1(fonction2, 'test 1', 'test 2');
    sans connaitre le nombre d'arguments surchargé sur la fonction1 !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 21
    Par défaut
    Il y a bien ça qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function name2obj(name, fonction)//execute la 'fonction' avec ses argument eventuels (à passer en surcharge) sur tous les objets 'name'
    {
    	for (i=0; i<document.getElementsByName(name).length; i++) fonction(document.getElementsByName(name)[i], name2obj.arguments[2], 
    														name2obj.arguments[3], 
    														name2obj.arguments[4], 
    														name2obj.arguments[5]/*, 
    														(...)*/);
    }//ex d'appel : name2obj(cible, 'switchClassName', classname1, classname2);
    Mais ce n'est pas très élégant comme technique :/

  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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    ben tu ne passes pas les paramètres ...

    ceci fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function fonction1(a,b,c)
    {
    	a(b, c);
    }
     
    function fonction2(b, c)
    {
    	alert(b);
    	alert(c);
    }
     
    fonction1(fonction2, 'test 1', 'test 2');
    ou encore en passant tous les arguments

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function fonction1(a,b)
    {
    	a(arguments);
    }
     
    function fonction2(b)
    {
    	alert(b[1]);
    	alert(b[2]);
    }
     
    fonction1(fonction2, 'test 1', 'test 2');
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 21
    Par défaut
    Merci pour vos réponses

    Oui mais non SpaceFrog : je ne sais pas à l'avance combien de paramètres seront passé à la fonction.
    Je cherche une solution propre pour un nombre de variables inconnu !

    Qd à arguments sekaijin, j'ai essayé ds mon premier message, mais je n'ai réussie que ca il y a 10min :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function name2obj(name, fonction)//execute la 'fonction' avec ses argument eventuels (à passer en surcharge) sur tous les objets getElementsByName(name)
    {
    	for (i=0; i<document.getElementsByName(name).length; i++) fonction(document.getElementsByName(name)[i], name2obj.arguments[2], 
    														name2obj.arguments[3], 
    														name2obj.arguments[4], 
    														name2obj.arguments[5]/*, 
    														(...)*/);
    }//ex d'appel : name2obj(cible, 'switchClassName', classname1, classname2);
    et je trouve ça très laid ^^

  6. #6
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function fonction1(a)
    {
    	a(arguments);
    }
     
    function fonction2(b)
    {
    	for (i=1;i<b.length;i++){;
    	alert(b[i])
    	}
    }
     
    fonction1(fonction2, 'test 1', 'test 2', 'test 3', 'test 4');
    sinon passe un array en second argument ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fonction1(fonction2, ['test 1', 'test 2', 'test 3', 'test 4']);
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function fonction1(a, b, c)
    {
    	a.call(b, c);
    }
     
    function fonction2(b, c)
    {
    	alert(b);
    	alert(c);
    }
     
    fonction1(fonction2, 'test 1', 'test 2');
    pour ce qui est de traiter un nombre quelconque d'argument il te faut voir du cîté de arguments https://developer.mozilla.org/en/Jav...cope/arguments

    A+JYT

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

Discussions similaires

  1. Transmission d'arguments sur une fonction anonyme
    Par Sylvercis dans le forum jQuery
    Réponses: 5
    Dernier message: 11/02/2015, 01h22
  2. Fonction en argument d'une autre fonction
    Par bonjour69 dans le forum Fortran
    Réponses: 2
    Dernier message: 12/03/2008, 16h17
  3. Fonction argument d'une autre Fonction
    Par didyeah dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/05/2007, 15h10
  4. Réponses: 16
    Dernier message: 05/10/2006, 16h51
  5. entrer une fonction en argument d'une autre fonction
    Par arno78 dans le forum VB 6 et antérieur
    Réponses: 22
    Dernier message: 07/09/2006, 14h29

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