Curs Javascript

Validare Formular

Inainte de a trimite datele dintr-un formular la un script de pe server, este indicata efectuarea unor minime verificari a campurilor din formular, pe partea de client, precum numarul de caractere din casetele pt. text si forma corecta a adresei de e-mail.


In exemplu de mai jos se foloseste jQuery pentru a valida urmatorul formular (doua casete de tip text, doua butoane radio, o lista select si un textarea).
<form action="script.php" method="post">
 Nume: <input type="text" name="nume" id="nume" /><br />
 E-mail: <input type="text" name="email" id="email" /><br />
 <span id="gen">
  Gen: <input type="radio" name="gen" value="barbat" />Barbat
  <input type="radio" name="gen" value="femeie" />Femeie
 </span><br />
 Varsta, intre: <select name="age" id="age">
  <option>..select..</option>
  <option value="5-10">5-10</option>
  <option value="11-18">11-18</option>
  <option value="19-30">19-30</option>
  <option value="31-50">31-50</option>
  <option value="51-70">51-70</option>
  <option value="71+">71+</option>
 </select><br />
 Mesaj:<br />
 <textarea name="msg" id="msg" rows="4" cols="33"></textarea><br />
 <input type="submit" name="submit" value="Trimite" />
</form>

Acum se scrie un cod jQuery care va detecta cand utilizatorul trimite formularul. Verifica daca in campul "nume" sunt adaugate cel putin doua caractere, daca adresa de e-mail are forma corecta, daca e bifat un buton radio si e selectata o optiune din select, si daca in textarea sunt adaugate cel putin 5 caractere.
Daca toate elementele din formular sunt completate corect, trimite formularul, altfel, adauga o clasa CSS class="error" la elementele nevalide, si afiseaza mesaj intr-o fereastra Alert.
Clasa "error" e definita intr-un stil CSS sa afiseze o bordura rosie.

Acesta este codul jQuery pentru validarea formularului de mai sus:
<style type="text/css"><!--
.error { border:2px solid red; }
--></style>
<script type="text/javascript" src="jquery_1.6.1.js"></script>
<script type="text/javascript"><!--
$(document).ready(function() {
  // detecteaza cand se trimite un formular, preia datele din campuri si le verifica
  $('form').submit(function() {
    // preia valorile din fiecare element
    var name = $(this).find('input[name="nume"]');          // Nume
    var email = $(this).find('input[name="email"]');        // E-mail
    var gen = $(this).find(':radio:checked');                         // Gen
    var age = $(this).find('select[name="age"]');           // Varsta
    var msg = $(this).find('#msg');                                   // Mesaj

    // sterge clasa "error" din toate elementele
    // seteaza o variabila "error" folosita ca sa determine daca formularul va fi sau nu trimis
    $('*').removeClass('error');
    var error = 0;
    var regx = /^([a-z0-9_\-\.])+\@([a-z0-9_\-\.])+\.([a-z]{2,4})$/i;   // regexp pt. e-mail

          /* Verificare campuri (adauga clasa "error" la cele nevalide si seteaza error=1) */
    // verifica "name"
    if(name.val().length<2){
      name.addClass('error');
      error = 1;
    }
    // verifica "email"
    if(!regx.test(email.val())){
      email.addClass('error');
      error = 1;
    }
    // verifica radio input "gen", daca se returneaza 'undefined', nu e bifat,
    // adauga clasa "error" la elementul care include butoanele radio
    if(gen.val()==undefined){
      $('#gen').addClass('error');
      error = 1;
    }
    // verifica lista Select "age", daca valoarea e cea afisata initial, din primul <option>
    if(age.val()==age.find('option:first').val()){
      age.addClass('error');
      error = 1;
    }
    // verifica "msg"
    if(msg.val().length<5){
      msg.addClass('error');
      error = 1;
    }

    // daca variabila error e 0, trimite formularul
    // altfel afiseaza un mesaj intr-o fereastra Alert, si blocheaza trimiterea formularului, prin return false
    if(error==0) {
      $(tihs).submit();
    }
    else {
      alert('Completati toate campurile care au bordura rosie');
      return false;      // opreste trimiterea formularului
    }
  });
});
--></script>

- Functia val() returneaza valoarea unui element de formular.
- $(this).find('input[name="nume"]') - returneaza elementul input cu name="nume" din obiectul curent.
- $(this).find(':radio:checked') - returneaza butonul radio bifat, din obiectul curent.
- $(this).find('select[name="age"]') - returneaza elementul <select> cu name="age" din obiectul curent.
- $(this).find('#msg') - obtine elementul cu id="msg" din obiectul curent.

Trimitere date din formular cu Ajax

Pentru a trimite datele dintr-un formular cu Ajax la un script de pe server, trebuie sa adaugati perechile "name=valoare" ale campurilor din formular intr-un sir, separate prin "&". Acest lucru se poate realiza usor cu metoda jQuery serialize().
Metoda serialize() codifica un set de elemente intr-un sir pentru trimitere.
Dupa ce formularul e validat, daca nu sunt erori, se aplica aceasta metoda si se trimite cu Ajax sirul cu datele din formular.

Iata un examplu complet. Se valideaza formularul creat mai sus, apoi trimite datele din el cu jQuery ajax() la un script PHP (in fisierul "script.php"), iar raspunsul de la server il include intr-un <div> in pagina (mai multe detalii in comentariile din cod).
- Raspunsul de la scriptul PHP e un cod HTML cu datele din formular.
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>jQuery Validare Trimitere</title>
<style type="text/css"><!--
.error { border:2px solid red; }
--></style>
<script type="text/javascript" src="jquery_1.6.1.js"></script>
<script type="text/javascript"><!--
$(document).ready(function() {
  // detecteaza cand se trimite un formular, preia datele din campuri si le verifica
  $('form').submit(function() {
    // preia valorile din fiecare element
    var name = $(this).find('input[name="nume"]');          // Nume
    var email = $(this).find('input[name="email"]');        // E-mail
    var gen = $(this).find(':radio:checked');                         // Gen
    var age = $(this).find('select[name="age"]');           // Age
    var msg = $(this).find('#msg');                                   // Mesaj

    // sterge clasa "error" din toate elementele
    // seteaza o variabila "error" folosita ca sa determine daca formularul va fi sau nu trimis
    $('*').removeClass('error');
    var error = 0;
    var regx = /^([a-z0-9_\-\.])+\@([a-z0-9_\-\.])+\.([a-z]{2,4})$/i;   // regexp pt. e-mail

          /* Verificare campuri (adauga clasa "error" la cele nevalide si seteaza error=1) */
    // verifica "name"
    if(name.val().length<2){
      name.addClass('error');
      error = 1;
    }
    // verifica "email"
    if(!regx.test(email.val())){
      email.addClass('error');
      error = 1;
    }
    // verifica radio input "gen", daca se returneaza 'undefined', nu e bifat,
    // adauga clasa "error" la elementul care include butoanele radio
    if(gen.val()==undefined){
      $('#gen').addClass('error');
      error = 1;
    }
    // verifica lista Select "age", daca valoarea e cea afisata initial, din primul <option>
    if(age.val()==age.find('option:first').val()){
      age.addClass('error');
      error = 1;
    }
    // verifica "msg"
    if(msg.val().length<5){
      msg.addClass('error');
      error = 1;
    }

    // daca variabila error e 0, aplica metoda serialize(), cu Ajax trimite sirul cu datele la server
    // altfel afiseaza mesaj in fereastra alert
    if(error==0) {
      var srl = $(this).serialize();

      $.ajax({
        type: 'post',
        url: 'script.php',
        data: srl,
        beforeSend: function() {
          // inainte sa efectueze cererea Ajax, afiseaza notificare de "Incarcare..." in "#resp"
          $('#resp').html('Incarcare...');
        },
        timeout: 10000,        // seteaza timpul maxim permis de executie a cererii (10 secunde)
        error: function(xhr, status, error) { alert('Eroare: '+ xhr.status+ ' - '+ error); },     // afiseaza Alert cu eroare
        success: function(raspuns) {
          $('#resp').html(raspuns);
        }
      });
    }
    else { alert('Completati toate campurile care au bordura rosie'); }

    return false;      // opreste deschiderea paginii cand e trimis formularul
  });
});
--></script>
</head>
<body>
<div id="resp">Aici va fi afisat raspunsul de la server.</div>
<h4>Completati formularul si trimiteti datele</h4>
<form action="script.php" method="post">
 Nume: <input type="text" name="nume" id="nume" /><br />
 E-mail: <input type="text" name="email" id="email" /><br />
 <span id="gen">
  Gen: <input type="radio" name="gen" value="barbat" />Barbat
  <input type="radio" name="gen" value="femeie" />Femeie
 </span><br />
 Varsta, intre: <select name="age" id="age">
  <option>..select..</option>
  <option value="5-10">5-10</option>
  <option value="11-18">11-18</option>
  <option value="19-30">19-30</option>
  <option value="31-50">31-50</option>
  <option value="51-70">51-70</option>
  <option value="71+">71+</option>
 </select><br />
 Mesaj:<br />
 <textarea name="msg" id="msg" rows="4" cols="33"></textarea><br />
 <input type="submit" name="submit" value="Trimite" />
</form>
</body>
</html>
Demo:
Aici va fi afisat raspunsul de la server.

Nume:
E-mail:
Gen: Barbat Femeie
Varsta, intre:
Mesaj:

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce tag se foloseste pentru a include fisier extern CSS in pagina web?
<body> <script> <link>
<link href="/templ/style.css" rel="stylesheet" type="text/css" />
Ce proprietate CSS seteaza marimea textului?
font-weight text-decoration font-size
h2 {
  font-size: 1em;
}
Indicati proprietate JavaScript care poate sa adauge cod HTML intr-un element.
text value innerHTML
document.getElementById("someID").innerHTML = "Continut HTML";
Clic pe functia care returneaza numarul de caractere dintr-un sir in PHP.
count() strlen() stristr()
$str = "http://CoursesWeb.net/";
$nr_chr = strlen($str);
echo $nr_chr;       // 22
Care este forma de feminin a adjectivului "white" (alb)?
white whitea whites
(In limba engleza adjectivele au aceeasi forma pt. ambele genuri)
The snow is white. - Zapada e alba.
Care este forma de feminin a adjectivului "blanco" (alb)?
blanc blance blanca
La nieve es blanca.
- Zapada e alba.
Validare si trimitere formular

Last accessed pages

  1. Pronumele direct si indirect (3653)
  2. Sintaxa JavaScript (11093)
  3. Tutoriale JavaScript (3591)
  4. Verbe neregulate (5283)
  5. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (271093)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (807)
  2. Exercitii engleza - English Tests and exercises - Grammar (360)
  3. Coduri pt culori (344)
  4. Cursuri limba engleza gratuite si lectii online (333)
  5. Gramatica limbii engleze - Prezentare Generala (332)