Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di Mizushi
    Registrato dal
    Aug 2005
    Messaggi
    1,125

    Controllo e confronto tra campi di un form

    Ciao a tutti.

    Ho un form dati che contiene 30 campi del tipo:

    BPT_1, BPT_2, BPT_3, .... BPT_29, BPT_30

    Dovrei controllare che il valore numerico inserito all'interno di ciascuno di questi campi BPT_n sia SEMPRE diverso, ad esempio:

    BPT_1 = 123
    BPT_2 = 123

    Non deve essere validato, mentre:

    BPT_1 = 123
    BPT_2 = 456

    deve essere validato.

    Naturalmente il controllo ed il confronto, va fatto per tutti i 30 campi BPT_n ... è un controllo/confronto possibile?

    Grazie

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    copia e incolla

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="it" xml:lang="it">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <meta http-equiv="Author" 
              content="Fabrizio Calderan, http://www.fabriziocalderan.it/" />
            
            <title>Valori unici</title>
        </head>
    
    <body>
    
        <script>
        function check(f) {
        
          var namePattern = /^bpt_/;
          var nameFields = {};
          
          var fields = f.getElementsByTagName('input');
          for (var i=0; i<fields.length; i++) {
                if (namePattern.test(fields[i].name)){
                    if (fields[i].value in nameFields) {
                        alert([fields[i].value, ' è un valore ripetuto.'].join(' '));
                        return false;
                    } 
                    nameFields[fields[i].value] = fields[i].name; 
                }
          }
          
          return true;
        
        }
        
        </script>
    
    </body>
    
    <form action="#" onsubmit="return check(this)">
      <input type="text" name="bpt_1" value="10">
    
      <input type="text" name="bpt_2" value="231">
    
      <input type="text" name="bpt_3" value="76">
    
      <input type="text" name="bpt_4" value="19">
    
      <input type="text" name="bpt_5" value="10">
    
      <input type="submit" />
    </html>
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Utente di HTML.it L'avatar di Mizushi
    Registrato dal
    Aug 2005
    Messaggi
    1,125
    Grazie x la risposta.

    Ho, però, un problema: ho provato ad integrare il tuo controllo su una funzione già esistente, ma il form viene validato senza eseguire il controllo:

    codice:
    //Validazione form
    function validateNumber(fieldObj, customAlert, sep, dec)
    {
      // Solo numeri interi
      if (sep.length != 1) re = new RegExp("^\\s*(\\d+)\\s*$", "");
      
      // Numeri interi e float (separatore decimale definito da 'sep')
      else
        {
          if (dec > 0) re = new RegExp("^\\s*(\\d*\\" + sep + "\\d{" + dec + "})\\s*$", "");
          else re = new RegExp("^\\s*(\\d+(\\" + sep + "\\d+)?|\\" + sep + "\\d+)\\s*$", "");
        }
     
      var rt = fieldObj.value.match(re);
      if (!rt)
        {
          if (customAlert.length > 0) alert(customAlert);
          else alert("Il campo '" + fieldObj.name + "' deve contenere un numero!");
     
          fieldObj.value = "";
          fieldObj.focus();
          return(false);
        }
    
    //INIZIO TUO CODICE DI CONTROLLO
          var namePattern = /^BPT_/;
          var nameFields = {};
          
          var fields = f.getElementsByTagName('input');
          for (var i=0; i<fields.length; i++) 
          
          {
                if (namePattern.test(fields[i].name))
                
                {
                    if (fields[i].value in nameFields) 
                    
                    {
                        alert([fields[i].value, ' è un valore ripetuto.'].join(' '));
                        return false;
                    } 
                    
                    nameFields[fields[i].value] = fields[i].name; 
                }
      }  
    
    
         // Reimposta il campo senza eventuali spazi in testa e in coda
         fieldObj.value = rt[1];
      
      return(true);
    }
    
    
    // Array con i dati per le validazioni
    var validateTypes = new Array(
                                  
                                 
                                 new Array(validateNumber, "ssn",  "PBT_1", "", "", 0,
                                                                   "Q_1", "", "", 0,
                                                                   "N_1", "", "", 0
                                 
                                 );  
                                 
    function submitIt(frmObj)
    {
      for ( var n = 0 ; n < validateTypes.length ; n++ )
        {
          var arr = validateTypes[n];
     
          var parms = arr[1];         // Tipo di parametri da passare alla
                                      // funzione di validazione
     
          var cb = parms.length + 1;  // Numero di parametri supplementari
                                      // da passare alla funzione di validazione
     
          for ( var m = 2 ; m < arr.length ; m += cb )
            {
              var sEval = "var rt = arr[0](frmObj[arr[m]]";
     
              for ( var e = 1 ; e < cb ; e++ )
                {
                  switch(parms.substr(e - 1, 1))
                    {
                      case "s":  // Il parametro è una stringa
                          sEval += ", '" + arr[m + e] + "'";
                          break;
     
                      case "n":  // Il parametro è un numero (intero o float)
                      case "p":  // Il parametro è uno statement
                          sEval += ", " + arr[m + e];
                          break;
                    }
                }
     
              eval(sEval + ");");
     
              // Se il corrente test non è riuscito, termina abortendo l'invio del FORM
              if (!rt) return(false);
            }
        }
     
      // Tutte le validazioni sono riuscite, abilita l'invio del FORM
      return(true);
    }
    
    ....
    
    <form method="POST" action="vai.asp" onsubmit="return(submitIt(this));">


  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    all'onsubmit chiami una funzione, submitIt
    il codice che ti ho passato non si trova dentro quella funzione nè viene richiamato da essa.
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    Utente di HTML.it L'avatar di Mizushi
    Registrato dal
    Aug 2005
    Messaggi
    1,125
    Originariamente inviato da fcaldera
    all'onsubmit chiami una funzione, submitIt
    il codice che ti ho passato non si trova dentro quella funzione nè viene richiamato da essa.
    Si, è vero hai ragione scusami x la gaffe.... modifico così ma non esegue il confronto tra il contentuo dei campi BPT, cioè valida:

    BPT_1 = 123
    BPT_2 = 123


    codice:
    function submitIt(frmObj)
    {
      for ( var n = 0 ; n < validateTypes.length ; n++ )
        {
          var arr = validateTypes[n];
     
          var parms = arr[1];         // Tipo di parametri da passare alla
                                      // funzione di validazione
     
          var cb = parms.length + 1;  // Numero di parametri supplementari
                                      // da passare alla funzione di validazione
     
          for ( var m = 2 ; m < arr.length ; m += cb )
            {
              var sEval = "var rt = arr[0](frmObj[arr[m]]";
     
              for ( var e = 1 ; e < cb ; e++ )
                {
                  switch(parms.substr(e - 1, 1))
                    {
                      case "s":  // Il parametro è una stringa
                          sEval += ", '" + arr[m + e] + "'";
                          break;
     
                      case "n":  // Il parametro è un numero (intero o float)
                      case "p":  // Il parametro è uno statement
                          sEval += ", " + arr[m + e];
                          break;
                    }
                }
     
              eval(sEval + ");");
     
              // Se il corrente test non è riuscito, termina abortendo l'invio del FORM
              if (!rt) return(false);
            }
        
    }
    
    
          
    
    //INIZIO TUO CODICE DI CONTROLLO
    
    var namePattern = /^BPT_/;
          var nameFields = {};
          
          var fields = f.getElementsByTagName('input');
          for (var i=0; i<fields.length; i++) 
          
          {
                if (namePattern.test(fields[i].name))
                
                {
                    if (fields[i].value in nameFields) 
                    
                    {
                        alert([fields[i].value, ' è un valore ripetuto.'].join(' '));
                        return false;
                    } 
                    
                    nameFields[fields[i].value] = fields[i].name; 
                }
      }      
    
     
    
    
     
      // Tutte le validazioni sono riuscite, abilita l'invio del FORM
      return(true);
    }

  6. #6
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Nell'esempio ho assunto che bpt_ fosse l'iniziale del nome di campi di input, assicurati che sia così anche per te (magari tu hai usato l'id)

    Ad ogni modo apri la pagina con firefox e apri la consolle degli errori (o guarda con firebug se hai installato quell'estensione), quindi prova ad inviare il form e vedere se e dove si verificano errori js.

    se ci fosse un errore che si verifica prima del codice in rosso, la validazione si fermerebbe comunque facendo partire il form
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  7. #7
    Utente di HTML.it L'avatar di Mizushi
    Registrato dal
    Aug 2005
    Messaggi
    1,125
    Originariamente inviato da fcaldera
    Nell'esempio ho assunto che bpt_ fosse l'iniziale del nome di campi di input, assicurati che sia così anche per te (magari tu hai usato l'id)

    Ad ogni modo apri la pagina con firefox e apri la consolle degli errori (o guarda con firebug se hai installato quell'estensione), quindi prova ad inviare il form e vedere se e dove si verificano errori js.

    se ci fosse un errore che si verifica prima del codice in rosso, la validazione si fermerebbe comunque facendo partire il form
    Grazie, ma ahimè sono pc aziendali "blindati" cioè non sono amministratore ( e non ho quindi possibilità di installare programmi o altro ) e l'unico browser di navigazione è IE 7.

    I campi del form sono tutti uguali da suffisso da 1 sino a 30:

    codice:
      
                                                                          
    <input type="text" name="Richiedente_1" size="30">
    <input type="text" name="BPT_1" size="10">
    <input type="text" name="Q_1" size="10">
    <input type="text" name="N_1" size="10">
    
    
     
    ....

  8. #8
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    procedi per esclusione

    nella funzione di validazione piazza un alert prima di ogni macroblocco, ad esempio prima del for esterno, al termine del for, ecc ecc... se metti ad esempio 5 alert e ne vedi uscire solo 3 allora l'errore si trova (presumibilmente) tra il terzo ed il quarto alert.

    In alternativa posta un link per vedere la pagina

    p.s.: per caso lasci dei campi BPT_... vuoti o no? Ad ogni modo dovrebbe funzionare lo stesso, inatti questo funziona

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="it" xml:lang="it">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <meta http-equiv="Author" 
              content="Fabrizio Calderan, http://www.fabriziocalderan.it/" />
            
            <title></title>
        </head>
    
    <body>
    
        <script>
        function check(f) {
        
          var namePattern = /^bpt_/;
          var nameFields = {};
          
          var fields = f.getElementsByTagName('input');
          for (var i=0; i<fields.length; i++) {
                if (namePattern.test(fields[i].name)){
                    if fields[i].value != '') {
                        if (fields[i].value in nameFields) {
                            alert([fields[i].value, ' è un valore ripetuto.'].join(' '));
                            return false;
                        } 
                        nameFields[fields[i].value] = fields[i].name; 
                    }
                }
          }
          
          return true;
        
        }
        
        </script>
    
    </body>
    
    <form action="#" onsubmit="return check(this)">
      <input type="text" name="bpt_3" value="">
    
      <input type="text" name="bpt_1" value="123">
    
      <input type="text" name="bpt_2" value="123">
    
      <input type="submit" />
    </html>



    :master:
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  9. #9
    Utente di HTML.it L'avatar di Mizushi
    Registrato dal
    Aug 2005
    Messaggi
    1,125
    Originariamente inviato da fcaldera

    In alternativa posta un link per vedere la pagina
    Grazie, ecco il link:

    http://www35.websamba.com/Mizushi/testJS.htm

  10. #10
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Error: fieldObj has no properties
    Source File: http://www35.websamba.com/Mizushi/testJS.htm
    Line: 56

    Questo appare riempiendo solo una riga
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.