Skip to content

10. JavaScript

In questa sezione illustriamo tre esempi di utilizzo di Javascript nelle pagine WEB. Ci concentriamo sulla gestione dei moduli, ma Javascript offre molte altre possibilità.

10.1. Recuperare le informazioni da un modulo

L'esempio riportato di seguito mostra come recuperare all'interno del browser i dati inseriti dall'utente in un modulo. Ciò consente in genere di effettuare operazioni di pre-elaborazione prima di inviarli al server.

10.1.1. Il modulo

Abbiamo un modulo che riunisce i componenti più comuni e un pulsante «Visualizza» che consente di visualizzare i dati inseriti dall’utente.

Image

10.1.2. Il codice

<html>

  <head>
    <title>Un formulaire traité par Javascript</title>
    <script language="javascript">
      function afficher(){
         // visualizza in un elenco le informazioni del modulo

         // si cancella prima
        effacerInfos();

         // si visualizza il valore dei # campi
        with(document.frmExemple){
           // campo nascosto
          ecrire("champ caché="+cache.value);
           // campo di testo singolo
          ecrire("champ textuel simple="+simple.value);
           // campo di testo multiplo
          ecrire("champ textuel multiple="+lignes.value);
          // pulsanti di opzione
          for(i=0;i<radio.length;i++){
            texte="radio["+i+"]="+radio[i].value;
            if(radio[i].checked) texte+=", coché";
            ecrire(texte);
          }//for
             // caselle di selezione
          for(i=0;i<qcm.length;i++){
            texte="qcm["+i+"]="+qcm[i].value;
            if(qcm[i].checked) texte+=", coché";
            ecrire(texte);
          }//for
           //elenco a discesa
          ecrire("index sélectionné dans le menu="+menu.selectedIndex);
          for(i=0;i<menu.length;i++){
            texte="menu["+i+"]="+menu.options[i].text;
            if(menu.options[i].selected) texte+=",sélectionné";
            ecrire(texte);
          }//per
           //elenco a scelta multipla
          for(i=0;i<lstVoitures.length;i++){
            texte="lstVoitures["+i+"]="+lstVoitures.options[i].text;
            if(lstVoitures.options[i].selected) texte+=",sélectionné";
            ecrire(texte);
          }//per
           //password
          ecrire("mot de passe="+passwd.value);
        }//con
      }//funzione

      function ecrire(texte){
         // scrive il testo nell'elenco delle informazioni
        frmInfos.lstInfos.options[frmInfos.lstInfos.length]=new Option(texte);
      }//scrivere

      function effacerInfos(){
        frmInfos.lstInfos.length=0;
      }//effacerInfos
    </script>
  </head>

  <body bgcolor="#C0C0C0" onload="afficher()">
    <center>
     <h2>Un formulaire traité par Javascript</h2>
    <hr>
    <form method="POST" name="frmExemple">
        <input type="hidden" name="cache" value="secret">
        <table border="0">
        <tr>
            <td align="center">Un champ textuel simple</td>
            <td align="center" width="100">&nbsp;</td>
            <td align="center">Un champ textuel sur plusieurs lignes</td>
        </tr>
        <tr>
            <td align="center"><input type="text" size="20" name="simple"></td>
            <td align="center" width="100">&nbsp;</td>
            <td align="center">
              <textarea name="lignes" rows="2" cols="40">Ce texte est modifiable</textarea>
            </td>
        </tr>
    </table>
    <table border="0">
      <tr>
       <td><strong>Des boutons radio :</strong></td>
        <td>
          <input type="radio" checked name="radio" value="FM">FM
        </td>
        <td>
          <input type="radio" name="radio" value="GO">GO
        </td>
        <td>
          <input type="radio" name="radio" value="PO">PO
        </td>
        <td>&nbsp;</td>
        <td><strong>Des choix multiples :</strong></td>
        <td>
          <input type="checkbox" name="qcm" value="un">un
        </td>
        <td>
          <input type="checkbox" name="qcm" value="deux">deux
        </td>
        <td>
          <input type="checkbox" name="qcm" value="trois">trois
        </td>
     </tr>
    </table>
    <table border="0">
      <tr>
       <td>Un menu déroulant : </td>
        <td>
          <select name="menu" size="1">
             <option>50 F</option>
              <option>60 F</option>
              <option>70 F</option>
              <option>100 F</option>
            </select>
        </td>
          <td>Une liste :</td>
           <td>
             <select name="lstVoitures" multiple size="3">
                <option>Renault</option>
                <option>Citroën</option>
                <option>Peugeot</option>
                <option>Fiat</option>
                <option>Audi</option>
              </select>
           </td>
        </tr>
    </table>
    <table border="0">
        <tr>
            <td>Un mot de passe : </td>
            <td><input type="password" size="21" name="passwd"></td>
            <td>&nbsp;</td>
            <td>Un champ de contexte caché : </td>
        </tr>
    </table>
    </form>
    <hr>
    <h2>Informations du formulaire</h2>
    <form name="frmInfos">
      <table>
        <tr>
          <td><input type="button" value="Effacer" onclick="effacerInfos()"></td>
          <td>
            <select name="lstInfos" multiple size="3">
            </select>
          </td>
          <td>
            <input type="button" name="cmdAfficher" value="Afficher" onclick="afficher()">
          </td>
        </tr>
    </form>
  </body>
</html>

10.2. Espressioni regolari in JavaScript

A livello di browser, JavaScript può essere utilizzato per verificare la validità dei dati inseriti dall'utente prima di inviarli al server. Ecco un programma per testare queste espressioni regolari.

10.2.1. La pagina di test

Image

10.2.2. Il codice della pagina

<html>

  <head>
    <title>Les expressions régulières en Javascript</title>
    <script language="javascript">
      function afficherInfos(){
        with(document.frmRegExp){
           // c'è qualcosa da fare?
          if (! verifier()) return;
          // Va bene - si cancellano i risultati precedenti
          effacerInfos();
           // verifica del modello
          modele=new RegExp(txtModele.value);
          champs=modele.exec(txtChaine.value);
          if(champs==null)
             // nessuna corrispondenza tra modello e stringa
            ecrireInfos("pas de correspondance");
          else{
             // corrispondenza - si visualizzano i risultati ottenuti
            ecrireInfos("Il y a correspondance");
            for(i=0;i<champs.length;i++)
              ecrireInfos("champs["+i+"]=["+champs[i]+"]");
          }//altrimenti
        }//con
      }//funzione

      function ecrireInfos(texte){
        // scrive il testo nell'elenco delle informazioni
        document.frmRegExp.lstInfos.options[document.frmRegExp.lstInfos.length]=new Option(texte);
      }//scrivere

      function effacerInfos(){
        frmRegExp.lstInfos.length=0;
      }//effacerInfos

      function jouer(){
         // verifica la corrispondenza del modello con la stringa nell'esempio selezionato
        with(document.frmRegExp){
          txtModele.value=lstModeles.options[lstModeles.selectedIndex].text
          txtChaine.value=lstChaines.options[lstChaines.selectedIndex].text
          afficherInfos();
        }//con
      }//riproduci

      function ajouter(){
         //aggiunge il test corrente agli esempi
        with(document.frmRegExp){
          // c'è qualcosa da fare?
          if (! verifier()) return;
          // aggiunta
          lstModeles.options[lstModeles.length]=new Option(txtModele.value);
          lstChaines.options[lstChaines.length]=new Option(txtChaine.value);
          // azzeramento degli inserimenti
          txtModele.value="";
          txtChaine.value="";
        }//con
      }//aggiungere

      function verifier(){
         // verifica che i campi di inserimento non siano vuoti
        with(document.frmRegExp){
          champs=/^\s*$/.exec(txtModele.value);
          if(champs!=null){
            alert("Vous n'avez pas indiqué de modèle");
            txtModele.focus();
            return false;
          }//se
          champs=/^\s*$/.exec(txtChaine.value);
          if(champs!=null){
            alert("Vous n'avez pas indiqué de chaîne de test");
            txtChaine.focus();
            return false;
          }//se
          // va bene
          return true;
        }//con
      }//verificare
    </script>
  </head>

  <body bgcolor="#C0C0C0">
    <center>
     <h2>Les expressions régulières en Javascript</h2>
    <hr>
    <form name="frmRegExp">
      <table>
        <tr>
          <td>Expression régulière</td>
          <td>Chaîne de test</td>
        </tr>
        <tr>
          <td><input type="text" name="txtModele" size="20"></td>
          <td><input type="text" name="txtChaine" size="20"></td>
        </tr>
        <tr>
          <td>
            <input type="button" name="cmdAfficher" value="Jouer le test" onclick="afficherInfos()">
          </td>
          <td>
            <input type="button" name="cmdAjouter" value="Ajouter aux exemples" onclick="ajouter()">
          </td>
        </tr>
      </table>
      <hr>
      <h2>Résultats de l'instruction champs=expression régulière.exec(chaine)</h2>
      <table>
        <tr>
          <td>
            <select name="lstInfos" size="3">
            </select>
          </td>
        </tr>
      </table>
      <hr>
      <h2>Exemples</h2>
      <table>
 <tr>
          <td align="center">Modèles</td>
          <td align="center">Chaînes</td>
        </tr>
        <tr>
          <td>
            <select name="lstModeles" size="1">
              <option>^\d+$</option>
              <option>^(\d+) (\d+)$</option>
              <option>^(\d+)(.*)(\d+)$</option>
              <option>^(\d+)(\s+)(\d+)$</option>
            </select>
          </td>
          <td>
            <select name="lstChaines" size="1">
              <option>67</option>
              <option>56 84</option>
              <option>45abcd67</option>
              <option>45   67</option>
            </select>
          </td>
          <td>
            <input type="button" name="cmdJouer" value="Jouer l'exemple" onclick="jouer()">
          </td>
        </tr>
    </form>
  </body>
</html>

10.3. Gestione delle liste in JavaScript

10.3.1. Il modulo

Image

10.3.2. Il codice

<html>

  <head>
    <title>Les listes en Javascript</title>

    <script language="javascript">
       // aggiungere
      function ajouter(L1,L2,T){
         // aggiunge il valore del campo T alle liste L1,L2
           // c'è qualcosa da fare?
          champs=/^\s*$/.exec(T.value);
          if(champs!=null){
            // il campo è vuoto
            alert("Vous n'avez pas indiqué la valeur à ajouter");
            txtElement.focus();
            return;
          }//if
           // si aggiunge l'elemento
          L1.options[L1.length]=new Option(T.value);
          L2.options[L2.length]=new Option(T.value);
          T.value="";
      }//aggiungere

       //svuotare
      function vider(L){
         // svuota la lista L
        L.length=0;
      }//svuota

     //trasferire
      function transfert(L1,L2,simple){
        //trasferisce in L2 gli elementi selezionati nell'elenco L1

         // c'è qualcosa da fare?
         // indice dell'elemento selezionato in L1
        index1=L1.selectedIndex;
        if(index1==-1){
          alert("Vous n'avez pas sélectionné d'élément");
          return;
        }//if
         // qual è la modalità di selezione degli elementi delle liste
        if(simple){ // selezione singola
          element1=L1.options[index1].text;
           //aggiunta in L2
          L2.options[L2.length]=new Option(element1);
          //eliminazione in L1
          L1.options[index1]=null;
        }//semplice
        if(! simple){ //selezione multipla
           //scorrimento in ordine inverso dell'elenco 1
          for(i=L1.length-1;i>=0;i--){
            //elemento selezionato?
            if(L1.options[i].selected){
               //lo si aggiunge a L2
              L2.options[L2.length]=new Option(L1.options[i].text);
              //lo si elimina da L1
              L1.options[i]=null;
            }//se
          }//per i
        }//if ! semplice
      }//trasferimento
   </script>
  </head>

  <body bgcolor="#C0C0C0">
    <center>
     <h2>Les listes en Javascript</h2>
    <hr>
    <form name="frmListes">
      <table>
        <tr>
          <td>
            <input type="button" name="cmdAjouter" value="Ajouter" onclick="ajouter(lst1A,lst1B,txtElement)">
          </td>
          <td>
            <input type="text" name="txtElement">
          </td>
        </tr>
      </table>
      <table>
        <tr>
          <td align="center">liste 1</td>
          <td align="center"><input type="button" value=">>" onclick="transfert(lst1A,lst2A,true)"</td>
          <td align="center"><input type="button" value="<<" onclick="transfert(lst2A,lst1A,true)"</td>
          <td align="center">liste 2</td>
          <td width="30"></td>
          <td align="center">liste 1</td>
          <td align="center"><input type="button" value=">>" onclick="transfert(lst1B,lst2B,false)"</td>
          <td align="center"><input type="button" value="<<" onclick="transfert(lst2B,lst1B,false)"</td>
          <td align="center">liste 2</td>
        </tr>
         <tr>
          <td></td>
          <td align="center">
            <select name="lst1A" size="5">
            </select>
          </td>
          <td align="center">
            <select name="lst2A" size="5">
            </select>
          </td>
          <td></td>
          <td></td>
          <td></td>
          <td align="center">
            <select name="lst1B" size="5" multiple >
            </select>
          </td>
          <td align="center">
            <select name="lst2B" size="5" multiple>
            </select>
          </td>

        </tr>
        <tr>
          <td></td>
          <td align="center"><input type="button" value="Vider" onclick="vider(lst1A)"</td>
          <td align="center"><input type="button" value="Vider" onclick="vider(lst2A)"</td>
          <td></td>
          <td></td>
          <td></td>
          <td align="center"><input type="button" value="Vider" onclick="vider(lst1B)"</td>
          <td align="center"><input type="button" value="Vider" onclick="vider(lst2B)"</td>
          <td></td>
        </tr>
        <tr>
          <td></td>
          <td colspan="2"><strong>Sélection simple</strong></td>
          <td></td>
          <td></td>
          <td></td>
          <td colspan="2"><strong>Sélection multiple</strong></td>
          <td></td>
        </tr>

      </table>
      <hr>
    </form>
  </body>
</html>