Visualizzazione dei risultati da 1 a 4 su 4

Visualizzazione discussione

  1. #3
    Ciao br1 e grazie per la risposta, non posso utilizzare la tua soluzione, mi spiego meglio quindi, perchè quello che devo fare è più complesso. Ho un campo input dove devo controllare che l'immissione dei dati rispetti determinate regole:
    Il campo accetta solo numeri e virgole, non si può cominciare con una virgola, due virgole non possono mai essere vicine, le cifre che compongono i numeri possono essere al massimo di 3, quindi ogni numero può essere di 1, 2 o 3 cifre, ogni numero deve esse separato da una virgola, i numeri possono essere infiniti (quindi non posso utilizzare maxlength).

    Esempio di inserimento valido: 5,41,548,999,1

    Ho già scritto lo script che fa questo e l'unico problema che mi rimane in sospeso è quello della mia domanda, quindi ti chiedo, hai una soluzione alla mia prima domanda?
    Ti posto il codice per completezza:

    codice:
    /* keypress mi permette di lavorare sul tasto premuto ancor prima che il carattere venga scritto nell'elemento di input
       le ripetizioni possono essere numeri secchi da massimo 3 cifre, oppure  dei ladder che hanno sempre massimo 3 cifre e sono separati da virgola  per un numero infinito di volte
      1,5,40,345,98, ... */
      $(".ripetizioni").keypress(function(e)
      {            
        //recupero quello che attualmente è stato inserito nell'input    
        var input = $(this).val();
        // ottengo la posizione del cursore nell'elemento di input 
        var cursor = $(this).prop("selectionStart");
        // lavoro solo se il primo carattere non è una virgola (44)
        if (e.which != 44 || cursor != 0)
        {
           /* con e.which controllo il tasto premuto ancor prima di vederlo  scritto nell'elemento di input, controllo che il carattere sia un numero  (48~57),
          oppure canc (0), oppure backspace (8), oppure una  virgola (44), se non è uno di questi, la funzione termina subito senza  stampare nulla nell'input */ 
          if (e.which >= 48 && e.which <= 57 || e.which == 0 || e.which == 8 || e.which == 44)
          {
             /* String.fromCharCode(e.which) mi converte il tasto premuto (codice  ascii) nella lettera corrispondente, il controllo if qui sotto dice che  se
            c'è una virgola nell'elemento di input e il cursore è vicino ad essa (o prima o dopo) e il tasto premuto è una virgola, 
            allora ho un caso di virgola-virgola (che non ammetto), quindi esco dalla funzione senza stampare nulla nell'input */  
             if (input.substr(cursor - 1, 1) + String.fromCharCode(e.which) != ",,"  && input.substr(cursor, 1) + String.fromCharCode(e.which) !=  ",,")
            {
              /* l'espressione qui sotto prende il  contenuto già presente nell'elemento di input ed in più ci aggancia il  tasto che sta per entrare da keypress,
              sostanzialmente mi ricostruisce la stringa completa che sta per essere stampata nell'elemento di input */
              stringa = input.substr(0, cursor) + String.fromCharCode(e.which) + input.substr(cursor);
              // creo un vettore con tutte le cifre tra le virgole
              var numeri = stringa.split(",");
              var notok;
               /* analizzo numero per numero (anche se rileggere tutti i numeri è un  controllo oneroso e superfluo, sarebbe stato ancora più complicato  analizzare solo quello che 
              sta intorno (nell'input) al tasto in entrata da keypress) */
              $.each(numeri, function(index, value)
              {
                 // ammetto solo numeri con lunghezza di cifre da 1 a 3, se il valore è  maggiore di 3 cifre significa che in entrata su keypress c'è un quarto  numero 
                if (value.length > 3)
                  notok = true;
              }); 
              // quindi se c'è un quarto numero termino la funzione senza stampare nulla
              if (notok)
                return false;
              else 
                return true;
            }
            else
              return false;
          }
          else
            return false;
        }
        else
          return false;
      });
    Ultima modifica di valerio.risa; 13-08-2019 a 21:01 Motivo: tag [code]

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.