Passer le nom d'une fonctiona executer a une autre fonction dans une variable .. [Résolu]

Signaler
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
-
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
-
    Saluté les pro du JS ...
dans ce long chemin qu'est l'apprentissage et la compréhension du JS je suis encore bloqué ...

J'ai le code suivant qui permet de détecter les changements de focus sur un champ ou les événements onchange...

j'essaye de le modifier afin de tester la validité des données entrées au moment de l'événement onchange.. l'idée est de prédéfinir quel test va etre appliqué à quel champ à l'aide de la fonction setTest .. ensuite on surveille et lorsque l'événement onchange est détecté on déclenche la fonction de test définie pour cet élément du formulaire (ici "isEmailAddr" ) ...
le truc c'est que j'arrive à détecter les onchange mais à à déclencher la foction de test associée à l'élément

/* fonction paramétrée pour fonctionner avec la feuille de style formulaires.css */
/* pour definir la couleur de surbrillance du champ en fonction de son importance il faut utiliser l'héritage css et donner au conteneur la classe "optionnal" ou "requis" */

    /* Fonction à appeller pour initialiser les évenements */

   
    function setTest(domElements /* Array */, test /* Optional */) {
        alert ("settest");
        for (i = 0; i < domElements.length; i++) {
            domElements[i].onchange = inputChange;
        }
    }
   

    function inputChange(e) {
        alert (e);
    }
    /* Après avoir fini le chargement */
    function style_form() {

        setTest(Array(document.getElementById("titre_doc")), 'isEMailAddr');
    }

/**************FONCTIONS DE VERRIFICATION DES FORMULAIRES ***************/

// Vérifie si l'adresse e-mail est valide
function isEMailAddr(elem) {
    alert ('email testé');
}

3 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
bonjour,

    pas compris du tout le code....
    mais si je me réfère au titre :
      



passer le nom d'une fonction a executer a une autre fonction dans une variable





    alors :
            function hello()
            {    alert('hello world');    }
            var fnct="hello";
            window[fnct]();

<hr />                Cordialement          Bul         [mon Site]     [M'écrire]<hr />

                                                                En général, c'est absurde de généraliser.
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
    je mets l'intégralité de mon code (un peu modifié là) avec toutes les autres fonctions qui ont le même système...)

le truc quand je modifie les fonctions inputChange et setTest comme cela c'est q'uil m'affiche le nom de la fonction de test dans mon champ au lieu de m'afficher le résultat de cette fonction sur this.value

/* fonction paramétrée pour fonctionner avec la feuille de style formulaires.css */
/* pour definir la couleur de surbrillance du champ en fonction de son importance il faut utiliser l'héritage css et donner au conteneur la classe "optionnal" ou "requis" */

    /* Fonction à appeller pour initialiser les évenements */
    function setEvents(domElements /* Array */, aClassName /* Optional */) {
        if (!aClassName)
            aClassName = "focus";

        for (i = 0; i < domElements.length; i++) {
            domElements[i].onfocus = inputFocus;
            domElements[i].onblur = inputBlur;
           
           
            domElements[i].setAttribute("focusClassName", aClassName);
        }
    }
   
    function setTest(domElements /* Array */, test /* Optional */) {
        alert (test);
        for (i = 0; i < domElements.length; i++) {
            domElements[i].setAttribute("functest", test);
            domElements[i].onchange = inputChange;
           
        }
    }
   
    function inputFocus(e) {
        this.setAttribute("oldFocusClassName", this.className);
        this.className = this.getAttribute("focusClassName");
    }
   
    function inputBlur(e) {
        this.className = this.getAttribute("oldFocusClassName");
    }
   
    function inputChange(e) {
        //alert ('inputchange function');
        //alert (e);
        alert (this.value);
        this.value = this.getAttribute("functest");
    }
    /* Après avoir fini le chargement */
    function style_form() {
        /*
            On spécifie le focus pour tous les input
            et textarea du document avec la classe par défaut
        */
        setEvents(document.getElementsByTagName("input"));
        setEvents(document.getElementsByTagName("textarea"));
        setEvents(document.getElementsByTagName("select"));
        setEvents(document.getElementsByTagName("checkbox"));
        /*
            L'email est important :)
            On spécifie la classe "important" donc pour le focus
            On aurait également pu tirer parti de l'héritage des CSS
        */
        setTest(Array(document.getElementById("titre_doc")), 'majprem');       
        setTest(Array(document.getElementById("ref_ec")), 'isEMailAddr');
    }

/**************FONCTIONS DE VERRIFICATION DES FORMULAIRES ***************/

// Vérifie si l'adresse e-mail est valide
function isEMailAddr(elem) {
    var str = elem.value;
    var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
    if (!str.match(re)) {
        alert("Veuillez vérifier le format de votre adresse e-mail.");
        setTimeout("focusElement('" + elem.form.name + "', '" + elem.name + "')", 0);
        return false;
    } else {
        return true;
    }
}

// Positionne le curseur dans un champ donné
function focusElement(elemId) {
    var elem = document.getElementsByTagiD(elemName);  
    elem.focus();
    elem.select();
}

//1ere lettre en maj
function majprem(elem) {
    var str1 = elem.substr(0,1).toUpperCase()
    var str2 = elem.substr(1,elem.length);
    return str1+str2;
}

 function testTel(elem) {
 // Aide à la saisie : numéro de téléphone
 var str = elem.value;
 var re = /[^0-9 +()]+/gi;
 if (str.match(re)) {
         alert ("Ecrivez le numéro sous la forme 02 99 xx xx xx \n ou +33 (0) 2 99 xx xx xx");
setTimeout("focusElement('" + elem.form.name + "', '" + elem.name + "')", 0);
        return false;
    } else {
        return true;
    }
}
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
    ben j'ai bien fait de bien réfléchir à mon titre alors ! merci ... ça marche ... mais maintenant il me reste un tout petit bug de focus à la noix pour arriver à une ergonomie parfaite tant au niveau du code de du côté utilisateur ... je crois que je vais devoir ouvrir un sujet pour ça ... encore un .. lol désolé ;)
@+