Passer le nom d'une fonctiona executer a une autre fonction dans une variable ..

Résolu
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 - 18 sept. 2007 à 11:59
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 - 18 sept. 2007 à 15:00
    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

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
18 sept. 2007 à 12:15
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.
3
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
18 sept. 2007 à 12:11
    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;
    }
}
0
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
18 sept. 2007 à 15:00
    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é ;)
@+
0
Rejoignez-nous