[JS] fonction en param d'une autre fonction : possible ?

fonction en param d'une autre fonction : possible ? [JS] - HTML/CSS - Programmation

Marsh Posté le 09-06-2002 à 20:22:34    

Re salut
 
 
Encore un ptit PB de javascript...
Voila, j'ai ma fonction verif_mail() qui fonctionne bien. Elle prend en paramettre des champs et si ils sont pas des emails les efface et retourne false...
 
Je voudrais créer une fonction envoyer() qui prendrait en paramettres des fonctions et leur message d'erreur...
Genre envoyer(fonction1, fonction1_error, fonction2, fonction2_error...)
fonction1, fonction2 seraient donc des fonctions mais donc faudrait passer en paramettre de la fonction envoyer() une autre fonction... Je sens que je suis pas clair... alors voila concretement ce que ca donne dans mon code :
 
onClick="envoyer('verif_mail('email_famille', 'email_mere', 'email_pere';)', 'erreur dans les mails';)">
 
Alors ma question est : est ce qu'on peut passer une fonction en parametre d'une autre fonction car là, j'y arrive po !!
 
Merci pour vos réponses

Reply

Marsh Posté le 09-06-2002 à 20:22:34   

Reply

Marsh Posté le 09-06-2002 à 22:06:31    

Impossibole ??

Reply

Marsh Posté le 09-06-2002 à 22:21:26    

jultey a écrit a écrit :

Impossibole ??


non.

Reply

Marsh Posté le 09-06-2002 à 22:29:47    

youdontcare a écrit a écrit :

non.  




 
Comment faire alors ?
Caractères d'échappement ?... Je sais pas... :(  T'as la solution ?

Reply

Marsh Posté le 09-06-2002 à 22:32:08    

function email_famille()
{
  ... le code
}
 
function verif_mail(fn)
{
  fn(); // éxécute la fonction donnée en paramètre
}
 
verif_mail(email_famille);

Reply

Marsh Posté le 09-06-2002 à 22:39:12    

youdontcare a écrit a écrit :

function email_famille()
{
  ... le code
}
 
function verif_mail(fn)
{
  fn(); // éxécute la fonction donnée en paramètre
}
 
verif_mail(email_famille);  




 
Au premier coup d'oeil je pige pas... :heink:  
Au deuxieme je pige toujours pas...
Je persévers  :D ...

Reply

Marsh Posté le 09-06-2002 à 22:41:49    

d'apres ce que je comprends de cette solution, je peux pas donner les parametres a ma fonctions interne en meme temps que ma fonction globale.... ??? non ?

Reply

Marsh Posté le 09-06-2002 à 23:02:00    

et si tu décrivais ce que tu veux faire plutôt que vouloir absolument passer par une fonction ? j'ai l'impression que tu te compliques la vie ...

Reply

Marsh Posté le 09-06-2002 à 23:09:57    

OK !
Bon, j'ai un formulaire et des fonctions qui marchent :
une fonction qui verifie les mail
une fonction qui verifie que les champs sont numériques
une fonction qui verifie que le champ est remplie
....
 
Ces fonctions fonctionnant séparéement fonctionnent. Elles retourne true ou false (et pas de message d'erreur )
 
J'aurais voulu créer une fonction général qui prend en param les fonctions précedentent...
 
Si elles renvoient toutes true, je poste mon form mais si une renvoie false, je renvoie un message d'erreur associé a la fonction qui a renvoyé false...
 
Donc j'avais penser que ma fonction général prendrai les parametres par paire : une fonction qu'elle évalue et son message d'erreur associé...
 
Si tu as un moyen plus simple qui me permet d'utiliser mes premieres fonctions , je suis preneur...

Reply

Marsh Posté le 09-06-2002 à 23:11:45    

jultey a écrit a écrit :

OK !
Bon, j'ai un formulaire et des fonctions qui marchent :
une fonction qui verifie les mail
une fonction qui verifie que les champs sont numériques
une fonction qui verifie que le champ est remplie
....
 
Ces fonctions fonctionnant séparéement fonctionnent. Elles retourne true ou false (et pas de message d'erreur )
 
J'aurais voulu créer une fonction général qui prend en param les fonctions précedentent...
 
Si elles renvoient toutes true, je poste mon form mais si une renvoie false, je renvoie un message d'erreur associé a la fonction qui a renvoyé false...
 
Donc j'avais penser que ma fonction général prendrai les parametres par paire : une fonction qu'elle évalue et son message d'erreur associé...
 
Si tu as un moyen plus simple qui me permet d'utiliser mes premieres fonctions , je suis preneur...  




 
je viens de me relire et mes fautes de grammaire me font peur !!! désolé !!! :eek2:

Reply

Marsh Posté le 09-06-2002 à 23:11:45   

Reply

Marsh Posté le 09-06-2002 à 23:18:44    

jultey a écrit a écrit :

Ces fonctions fonctionnant séparéement fonctionnent.


:D je lisais justement http://fr.news.yahoo.com/020607/108/2mdii.html  :lol:

Reply

Marsh Posté le 09-06-2002 à 23:22:05    

youdontcare a écrit a écrit :

:D je lisais justement http://fr.news.yahoo.com/020607/108/2mdii.html  :lol:  




ca vaut pas les perles du bac :lol:

Reply

Marsh Posté le 09-06-2002 à 23:26:51    

dans ton cas, ça m'a l'air mieux de passer par eval(), qui évalue la string qu'on lui passe. eval("alert('hello';)" ) est équivalent à alert('hello';);.
 
tu peux donc faire un tableaux d'appels :
 
var checkForm = array("verif_mail('email_famille', 'email_mere'"
"verif_numeric('champ1';)" );
 
un tableau d'erreurs :
 
var checkFormErrors = array("erreur dans les mails", "erreur numérique" );
 
tu passes ces tableaux à ta fonction envoyer :
 
envoyer(checkForm, checkFormErrors);
 
envoyer évalue toutes les fonctions du tableau et renvoie le message associé si une des fonctions foire :
 
function envoyer(fns, fnerrors)
{
  for (i=0; i<fns.length; i++)
  {
    eval("var resultat = " + fns[i]);
    if (resultat != true) return fnerrors[i];
  }
  return true;  
}
 
par exemple. je trouve ça un peu crade, mais je vois pas bien comment faire mieux pr le moment ...

Reply

Marsh Posté le 09-06-2002 à 23:32:45    

youdontcare a écrit a écrit :

 
 
tu peux donc faire un tableaux d'appels :
 
var checkForm = array("verif_mail('email_famille', 'email_mere'"
"verif_numeric('champ1';)" );
 
un tableau d'erreurs :
 
var checkFormErrors = array("erreur dans les mails", "erreur numérique" );
 
 




 
ces 2 tableaux, faut donc que je les déclare hors de ma fonction générale ... Entre les balises scripts ? Juste comme ca donc ?!

Reply

Marsh Posté le 09-06-2002 à 23:34:58    

errata : majuscule a Array ...
 
sinon tu peux faire un tableau par fonction, qui contient le nom de la fonction, ses arguments, son code d'erreur :
 
var verif_mail = Array('verif_mail', Array('email_famille', 'email_mere';), 'erreur dans les mails);
 
... regrouper ces tableau dans un autre tableau :D et le passer à envoyer qui construit l'appel à la fonction dans une string et le passe à eval().

Reply

Marsh Posté le 09-06-2002 à 23:35:57    

jultey a écrit a écrit :

ces 2 tableaux, faut donc que je les déclare hors de ma fonction générale ... Entre les balises scripts ? Juste comme ca donc ?!


si tu veux les rendre globaux, oui. si une fonction se charge de faire la manip, tu peux les déclarer dans la fonction.

Reply

Marsh Posté le 09-06-2002 à 23:39:27    

Merci pour tout le mal que tu t'es donné pour m'expliquer. Je crois que ça a fait effet... Je vais essayer de mettre tout ca en application maintenant !
 :jap:

Reply

Marsh Posté le 09-06-2002 à 23:42:05    

:D

Reply

Marsh Posté le 11-06-2002 à 00:59:47    

Ben voila, je crois que j'y suis arrivé !
 

//tableau a remplir
//une fonction et son message d'erreur associé
//A compléter !
the_tableau = Array("verif_mail( 'email_pere', 'email_mere')", "Champs mails obligatoires", "verif_chiffre('cp_pere', '5', 'cp_mere', '5')", "Rentrez des chiffres" );
//Cette fonction est associé avec le tableau the_tableau
// elle prend en parametre le 'titre' du message d'erreur
// ! LE FORM DOIT S'APPELER f
function envoyer(msg)
{
//Initialisation des messages d'erreur
        var msg = msg + "\n" ;
        var msg_ini = msg ;
//longueur du tableau qui contient fonction et message d'erreur
        var tab_long = the_tableau.length ;
 
//Test pour savoir si les param du tableau vont bien par 2
 if(tab_long%2 != 0 )
         alert('Erreur de programmation :\n Les paramètres vont par 2\n dans le tableau the_tableau de la fonction envoyer()') ;
 
// pour chaque fonction du tableau the_tableau
        for(var i = 0; i < tab_long; i = i + 2)
        {
        // on recoit soit true soit false en evaluant la fonction
         var retour = eval(the_tableau[i]) ;
        // si c'est false
                if(retour != true)
                // On agrandit le message d'erreur
                 msg = msg + the_tableau[i+1] + "\n" ;
        }
 
//retour
//si c'est bon on envoit
 if(msg == msg_ini)
         document.f.submit ;
//sinon on affiche toutes les erreurs
 else
         alert(msg) ;
}//envoyer()
 
</script>

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed