Bonjour � tous.

Je suis actuellement en train de d�velopper un validateur de champ de formulaire en javascript.

J'ai donc cr�� une classe javascript avec des prototypes. La classe fonctionne en parsant le dom et en d�coupant la classe de chaque input de mani�re � executer la bonne callback associ� au type � tester.

Mon probl�me est que dans l'appel de la callback dans mon tableau de callback, la methode une fois execut�e n'a plus acc�s aux autres prototypes (comme le fait en objet une methode utilisant une autre methode).

En effet, le this dans la callback appel�e pointe vers le array, et non vers l'instance de Validator. J'ai tent� un this.parent pour remonter jusqu'a l'instance mais ce fut sans r�sultats.

Auriez-vous des id�es pour m'aiguiller ? Je pr�f�rerais �viter d'utiliser un switch dans ma methode validator pour que l'ajout de nouvelles r�gles se fasse facilement.

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/**
 * Classe Validator
 * Permet de valider les champs d'un formulaire
 * @returns {Validator}
 */
var Validator = function()
{ 
    this.elementsError = new Array();
    this.emptyFields = new Array();
 
    /**
     * Liste des types de données
     * @type array
     */
    this.types = new Array('string',
                           'phone',
                           'email',
                           'number',
                           'file');
 
    /**
     * Liste des callback associés aux types de données
     * @type type
     */
    this.callback = {"string": this.checkString ,
                     "phone":this.checkTel,
                     "email":this.checkEmail,
                     "number":this.checkNumber,
                     "file":this.checkFile};
 
     /**
     * Liste des actions
     * @type type
     */
    this.actions = {"or": this.OneOrOthers};
 
};
 
 /**
     * Methode qui ajoute une bordure au champ
     * @param {type} element
     */
    Validator.prototype.addBorder = function(element)
    {
        element.style.border= "1px solid red";
    };
 
    /**
     * Methode qui enlève la bordure du champ
     * @param {type} element
     */
    Validator.prototype.removeBorder = function(element)
    {
        element.style.border="1px inset white";
    };
 
  /**
     * Fonction de validation
     * @returns {undefined}
     */
    Validator.prototype.validate = function()
    {
 
           // .... Boucle
 
       elements = ('input[class^='+this.types[i]+']');
 
          // ...
 
      this.callback[this.types[i]](elements[j],ENom);
 
       // ... fin de boucles
 
  }
 
    // fonction qui vérifie si un input ne contient pas de caractères speciaux
    Validator.prototype.checkString = function (element,name)
    {
        console.log("checkString"+name);
        if(0 < element.value.length)
        {
            var regEx=/^[\w\s-]*$/;
 
            if(!regEx.test(element.value))
            {  
                this.elementsError.push("Le champ "+name+" ne doit pas contenir de caractères speciaux");   // ici la methode ne trouve pas le tableau elementsError
 
            }else
            {
                this.removeBorder(element); // ici la methode ne trouve pas la methode removeBorder
            }
        }
    };