jQuery: validazione dei form object-oriented

jQuery: validazione dei form object-oriented

In JavaScript, ogni cosa è un oggetto. La particolarità degli oggetti JavaScript è che possono essere modificati in qualsiasi momento. La loro natura è flessibile e dinamica. Nella validazione dei form, essi possono essere utilizzati come contenitori di elementi, regole di validazione e messaggi di errore. Vediamo il loro uso con jQuery.

Creiamo un oggetto il cui costruttore accetta come parametro un riferimento al form da validare:


var Validator = function(form) {



};

Impostiamo la proprietà form e gli assegniamo un valore predefinito:


var Validator = function(form) {

  this.form = $(form) || $('form').eq(0);


};

Creiamo tre oggetti letterali per conservare le regole di validazione, i messaggi di errore e gli elementi da validare:


var Validator = function(form) {

  this.form = $(form) || $('form').eq(0);
  
  var rules = {};
  var messages = {};
  var elements = {};



};

Ora creiamo tre metodi per popolare questi tre oggetti in modo dinamico:


var Validator = function(form) {

  this.form = $(form) || $('form').eq(0);
  
  var rules = {};
  var messages = {};
  var elements = {};

  var addRule = function(property, value) {
  
    rules[property] = value;
  
  };
  
  var addMessage = function(message, value) {
  
    messages[message] = '<div class="error">' + value + '</div>';
  
  
  };
  
  var addElement = function(element, value) {
  
    elements[element] = value;
  
  };


};

Creiamo quindi un metodo per mostrare i messaggi di errore:


var Validator = function(form) {

  this.form = $(form) || $('form').eq(0);
  
  var rules = {};
  var messages = {};
  var elements = {};

  var addRule = function(property, value) {
  
    rules[property] = value;
  
  };
  
  var addMessage = function(message, value) {
  
    messages[message] = '<div class="error">' + value + '</div>';
  
  
  };
  
  var addElement = function(element, value) {
  
    elements[element] = value;
  
  };

  var showMessage = function(message, element) {
  
    $(message).insertAfter(element);
  
  };
  
  
};

Bisogna ora creare il metodo di validazione del form. Prima vanno impostati gli elementi da validare, le regole e i messaggi di errore:


var Validator = function(form) {

  this.form = $(form) || $('form').eq(0);
  
  var rules = {};
  var messages = {};
  var elements = {};

  var addRule = function(property, value) {
  
    rules[property] = value;
  
  };
  
  var addMessage = function(message, value) {
  
    messages[message] = '<div class="error">' + value + '</div>';
  
  
  };
  
  var addElement = function(element, value) {
  
    elements[element] = value;
  
  };

  var showMessage = function(message, element) {
  
    $(message).insertAfter(element);
  
  };
  
  var validate = function() {
  
    addRule('email', /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/);
    addRule('username', /^[a-z0-9]+$/);
    addMessage('email', 'E-mail non valida');
    addMessage('username', 'Il nome utente deve essere alfanumerico');
    addElement('email', '#email');
    addElement('username', '#username');
    
    
  };
  
  
};

A questo punto eseguiamo la validazione dei valori dei campi e restituiamo un valore booleano che farà in modo che il form venga inviato o meno:


var Validator = function(form) {

  this.form = $(form) || $('form').eq(0);
  
  var rules = {};
  var messages = {};
  var elements = {};

  var addRule = function(property, value) {
  
    rules[property] = value;
  
  };
  
  var addMessage = function(message, value) {
  
    messages[message] = '<div class="error">' + value + '</div>';
  
  
  };
  
  var addElement = function(element, value) {
  
    elements[element] = value;
  
  };

  var showMessage = function(message, element) {
  
    $(message).insertAfter(element);
  
  };
  
  var validate = function() {
  
    addRule('email', /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/);
    addRule('username', /^[a-z0-9]+$/);
    addMessage('email', 'E-mail non valida');
    addMessage('username', 'Il nome utente deve essere alfanumerico');
    addElement('email', '#email');
    addElement('username', '#username');
    
    var valid = true;
      
      var emailValue = $(elements['email']).val();
      var usernameValue = $(elements['username']).val();
      
      if(!rules['email'].test(emailValue)) {
      
         showMessage(messages['email'], elements['email']);
         
         valid = false;
         
      }
      
      if(!rules['username'].test(usernameValue)) {
      
        showMessage(messages['username'], elements['username']);
        
        valid = false;
        
      }
      
      return valid;
               

    
    
  };
  
  
};

Creiamo infine l'unico metodo pubblico del nostro oggetto che lega il metodo di validazione all'evento submit del form:


var Validator = function(form) {

  this.form = $(form) || $('form').eq(0);
  
  var rules = {};
  var messages = {};
  var elements = {};

  var addRule = function(property, value) {
  
    rules[property] = value;
  
  };
  
  var addMessage = function(message, value) {
  
    messages[message] = '<div class="error">' + value + '</div>';
  
  
  };
  
  var addElement = function(element, value) {
  
    elements[element] = value;
  
  };

  var showMessage = function(message, element) {
  
    $(message).insertAfter(element);
  
  };
  
  var validate = function() {
  
    addRule('email', /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/);
    addRule('username', /^[a-z0-9]+$/);
    addMessage('email', 'E-mail non valida');
    addMessage('username', 'Il nome utente deve essere alfanumerico');
    addElement('email', '#email');
    addElement('username', '#username');
    
    var valid = true;
      
      var emailValue = $(elements['email']).val();
      var usernameValue = $(elements['username']).val();
      
      if(!rules['email'].test(emailValue)) {
      
         showMessage(messages['email'], elements['email']);
         
         valid = false;
         
      }
      
      if(!rules['username'].test(usernameValue)) {
      
        showMessage(messages['username'], elements['username']);
        
        valid = false;
        
      }
      
      return valid;
               

    
    
  };
  
  this.init = function() {
  
    this.form.bind('submit', validate);
  
  };
  
  
};

Ed ecco come viene utilizzato il nostro oggetto:


$(function() {

  var validator = new Validator('#signup');
  validator.init();
  

});

Potete visionare l'esempio finale in questa pagina.

Torna su