Visualizzazione risultati 1 fino 10 di 10

Discussione: [js] controllo numero

  1. #1
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito [js] controllo numero

    Ciao

    Faccio un semplice controllo su campi input per verificare l'immissione o meno
    dei dati così:

    codice:

    .......


    if (document.art.quantita.value==document.art.quantit a.defaultValue ||
    document.art.quantita.value.indexOf(' ',0)==0)
    {
    alert('\nNessuna quantità inserita.')
    document.art.quantita.select()
    document.art.quantita.focus()
    return false
    }

    if (document.art.prezzo.value==document.art.prezzo.de faultValue ||
    document.art.prezzo.value.indexOf(' ',0)==0)
    {
    alert('\nNessun prezzo inserito.')
    document.art.prezzo.select()
    document.art.prezzo.focus()
    return false
    }

    .....


    <td width=18%><b>Quantità</td>
    <td width=82%><input type=text name="quantita" size=10></td>
    </tr>
    <tr>
    <td width=18%><b>Prezzo Un.</td>
    <td width=82%><input type=text name="prezzo" size=10></td>

    .....



    adesso per questi 2 campi avrei la necessità di controllare se l'utente
    ha inserito di fatto solo valori numerici (va bene anche la virgola visto che un numero può essere anche del 4,58 ecc) e basta.
    Dovrei in pratica inserire un altro IF per i 2 campi per controllare
    che i campi non accettino altri caratteri se non sono numeri con o senza virgola

    Potete suggerirmi il codice adatto, per piacere?
    Grazie

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Se ti interessa un controllo "alla buona", JavaScript ha due funzioni pronte all'uso:
    - parseInt (stringa) verifica se il numero specificato in stringa è un intero e ne estrae il valore numerico
    - parseFloat (stringa) verifica se il numero specificato in stringa è un decimale (attenzione, però, la virgola non è ammessa e per separare i decimali si usa il punto) e ne estrae il valore numerico.

    Un problema che hanno queste funzioni, però, è quello di non effettuare correttamente la conversione quando la stringa inizia con delle cifre ma contiene delle lettere. Ad esempio:
    - parseInt ("81") restituisce 81
    - parseInt ("a81") restituisce "NaN" (Not A Number)
    - parseInt ("81a") restituisce 81

    Quindi, forse faresti meglio ad utilizzare queste funzioni:
    Codice:
    function myParseInt (string)
    {
       var sign = 1;
       var number = 0;
       for (var i = 0; i < string.length; i++)
       {
          var ch = string.charAt (i);
          if (ch == '+' || ch == '-')
          {
             if (i == 0 && ch == '-') sign = -1;
             else if (i != 0 || ch != '+') return "NaN";
          }
          else
          {
             number *= 10; 
             switch (ch)
             {
                case '0': number += 0; break;
                case '1': number += 1; break;
                case '2': number += 2; break;
                case '3': number += 3; break;
                case '4': number += 4; break;
                case '5': number += 5; break;
                case '6': number += 6; break;
                case '7': number += 7; break;
                case '8': number += 8; break;
                case '9': number += 9; break;
                default: return "NaN";
             }
          }
       }
       return sign * number;
    }
    
    function myParseFloat (string)
    {
       // converte separatamente mantissa ed esponenziale, se ci sono
       var idx = string.indexOf ('e');
       if (idx != -1)
       {
          var mantix = myParseFloat (string.substring (0, idx));
          var exp = myParseInt (string.substring (idx + 1));
          return mantix * Math.pow (10, exp);
       }
       idx = string.indexOf ('E');
       if (idx != -1)
       {
          var mantix = myParseFloat (string.substring (0, idx));
          var exp = myParseInt (string.substring (idx + 1));
          return mantix * Math.pow (10, exp);
       }
       
       // a questo punto non c'è esponenziale, quindi converti separatamente parte intera e decimale
       idx = string.indexOf ('.');
       if (idx != -1)
       {
          var integer = myParseInt (string.substring (0, idx));
          var decimal = myParseInt (string.substring (idx + 1));
          return integer + decimal * Math.pow (10, idx + 1 - string.length);
       }
       else
          return myParseInt (string)
    }
    Ti consiglio di provarle queste funzioni perché le ho scritte un po' "di getto" e non sono sicuro che funzionino...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Ciao Dementialsite
    grazie per la risposta.
    Non ho avuto modo di testare la tua soluzione nel frattempo avevo già fatto questo (posto l'intera pagina che invia i dati, articoli.html):

    Codice:
    <html>
    <head>
    <title>Form dati</title>
    <SCRIPT LANGUAGE='JavaScript'>
    <!--
    function validate_form()
    {
    
        if (document.art.codice.value==document.art.codice.defaultValue ||
        document.art.codice.value.indexOf(' ',0)==0)
        {
            alert('\nNessun codice inserito.')
            document.art.codice.select()
            document.art.codice.focus()
            return false
        }
          if ((isNaN(document.art.codice.value)) ||  document.art.codice.value.indexOf('-',0)==0 ||  document.art.codice.value.indexOf('+',0)==0) {
       alert("Codice non valido.");
       document.art.codice.value = "";
       document.art.codice.focus();
       return false;
            }
        
        if (document.art.descrizione.value==document.art.descrizione.defaultValue ||
        document.art.descrizione.value.indexOf(' ',0)==0)
        {
            alert('\nNessuna descrizione inserita.')
            document.art.descrizione.select()
            document.art.descrizione.focus()
            return false
        }
        
        if (document.art.quantita.value==document.art.quantita.defaultValue ||
        document.art.quantita.value.indexOf(' ',0)==0)
        {
            alert('\nNessuna quantità inserita.')
            document.art.quantita.select()
            document.art.quantita.focus()
            return false
        }
        
        if (document.art.quantita.value.substring(1,2) == "," ||
            document.art.quantita.value.substring(2,3) == "," ){
       alert("Per i decimali utilizzare il punto, es: 4 chili e mezzo= 4.5");
       document.art.quantita.value = "";
       document.art.quantita.focus();
       return false;
            }
        
         if ((isNaN(document.art.quantita.value))|| document.art.quantita.value.indexOf('-',0)==0 ||  document.art.quantita.value.indexOf('+',0)==0) {
       alert("Quantità non valida.");
       document.art.quantita.value = "";
       document.art.quantita.focus();
       return false;
            }
            
    
    
        
        if (document.art.prezzo.value==document.art.prezzo.defaultValue ||
        document.art.prezzo.value.indexOf(' ',0)==0)
        {
            alert('\nNessun prezzo inserito.')
            document.art.prezzo.select()
            document.art.prezzo.focus()
            return false
        }
        
         if (document.art.prezzo.value.substring(1,2) == "," ||
            document.art.prezzo.value.substring(2,3) == "," ){
       alert("Per i decimali utilizzare il punto, es: 3 euro e 55 cent = 3.55");
       document.art.prezzo.value = "";
       document.art.prezzo.focus();
       return false;
            }
        
         if ((isNaN(document.art.prezzo.value))|| document.art.prezzo.value.indexOf('-',0)==0 ||  document.art.prezzo.value.indexOf('+',0)==0) {
       alert("Prezzo non valido.");
       document.art.prezzo.value = "";
       document.art.prezzo.focus();
       return false;
            }
    
    }
    //----------------------------------------
    // -->
    </SCRIPT>
    </head>
    
    <body bgcolor="#DAB88B" onload="document.art.codice.focus();" >
    <TABLE border=0 width=100% cellpadding=3>
    <tr>
    <td width=100% colspan=2>
    <p align=center><b>Inserisci Articoli
    <form method=POST action="fatt1.php" target= "fatt1" name = "art" onSubmit="return validate_form()">
    </b></td>
    </tr>
    <tr>
    <td width=18%><b>Codice</b></td>
    <td width=82%><input type=text name="codice" size=10></td>
    </tr>
    <tr>
    <td width=18%><b>Descrizione</b></td>
    <td width=72%><textarea name="descrizione"  cols="23"></textarea></td>
    </tr>
    <tr>
    <td width=18%><b>Quantità</td>
    <td width=82%><input type=text name="quantita"  size=10></td>
    </tr>
    <tr>
    <td width=18%><b>Prezzo Un.</td>
    <td width=82%><input type=text name="prezzo"  size=10></td>
    </tr>
    <tr>
    <tr>
    <td width=18%><b>IVA</td>
    <td width=82%><select size="1" name="iva"  size=10>
      <option> 4</option>
      <option> 10</option>
      </select></td>
    </tr>
    <tr>
    <td width=18%><b><input type="submit" name="invia" value="Inserisci"></td>
    </tr>
    </table>
    </form>
    </body>
    </html>
    In pratica con il javascript controllo:

    1) se tutti i campi sono stati compilati;

    2) per quelli numerici se si tratta effettivamente di un numero e visto che
    possono essere inseriti anche numeri negativi faccio fare un ulteriore controllo sul simbolo - e + che non servono.

    3) ho preferito, visto che con i valori con la virgola (la mia prima soluzione) era un casino e poi
    è più facile inserire i valori numerici dalla tastierina numerica che riporta solo il punto, fare un controllo sull'inserimento della virgola e suggerire di usare solo il punto (tanto il db li accetta così) e tanto nella pagina php
    inserisco un bel: ".number_format($prezzo_uni, 2, ',', '.')."</td>

    4) if (document.art.prezzo.value.substring(1,2) == "," ||
    document.art.prezzo.value.substring(2,3) == "," ){

    qui ci sarebbe un problema in quanto un prezzo potrebbe essere anche superiore a 1.50 o 20.58 ad esempio e dovrei quindi inserire ulteriori controlli per le centinaia, migliaia ecc ecc e così anche per le quantità ma
    dovresti consigliarmi tu una soluzione più professionale.

    Ho notato che a volte (diciamo raramente) forse per qualche problema del browser o nel codice, nel campo descrizione pur non inserendovi nessun dato riesco ad inviare i dati ritrovandomi nella pagina php la riga senza descrizione cosa che non dovrebbe succedere. Che ne pensi?

    In una funzione volevo adottare una soluzione alternativa concatenando gli if.
    Visto che è possibile in javascript utilizzare il simbolo ||
    (per o) pensavo alla possibiltà di usare anche && (per e come per le query mysql) ed ottenere
    controllo di condizioni più complicate e performanti..ma non funziona.
    Sbaglio?

    Ok penso di avere detto tutto. Aspetto i tuoi preziosi suggerimenti per migliorare la pagina e rendere i controlli sicuri. Inoltri potresti integrare la tua soluzione con questa pagina eliminado quello che secondo te non serve più?
    grazie

    ps: in un secondo momento vorrei usare anche l'autocompletamento
    (credo con ajax). Vorrei che inserendo il codice prodotti il campo descrizione richiami automaticamente (e gradualmente) il nome del prodotto dal db e viceversa inserendo il nome del prodotto (che dovrebbe
    gradualmente comparire digitando progressivamente le lettere) sia inserito automaticamente il codice relativo.

    Pensi che come è strutturata la pagina sopra si possono creare conflitti con il resto del codice javascript usando ajax?

  4. #4
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da gianlucaweb
    ... In pratica con il javascript controllo:

    1) se tutti i campi sono stati compilati;
    Immagino che quel controllo sia dato da xxx.value == xxx.defaultValue. Ma perché un campo dovrebbe risultarti non compilato se trovi uno spazio in prima posizione (pensa se qualcuno scrivesse, ad esempio, ' 35020' con uno spazio in testa)?
    Citazione Originalmente inviato da gianlucaweb
    2) per quelli numerici se si tratta effettivamente di un numero e visto che
    possono essere inseriti anche numeri negativi faccio fare un ulteriore controllo sul simbolo - e + che non servono.
    Questo l'ho trovato... non mi ricordo però se il controllo di isNaN() è attendibile o ha gli stessi problemi di parseInt() e parseFloat() che ti ho detto sopra.
    Citazione Originalmente inviato da gianlucaweb
    3) ho preferito, visto che con i valori con la virgola (la mia prima soluzione) era un casino e poi
    è più facile inserire i valori numerici dalla tastierina numerica che riporta solo il punto, fare un controllo sull'inserimento della virgola e suggerire di usare solo il punto (tanto il db li accetta così) e tanto nella pagina php
    inserisco un bel: ".number_format($prezzo_uni, 2, ',', '.')."</td>
    Buona soluzione... se comunque ti tornasse in mente l'idea di usare la virgola per i decimali, prima di estrarne il numero puoi sempre convertire le virgole in punti, con il metodo str = str.replace (',', '.')
    Citazione Originalmente inviato da gianlucaweb
    4) if (document.art.prezzo.value.substring(1,2) == "," ||
    document.art.prezzo.value.substring(2,3) == "," ){

    qui ci sarebbe un problema in quanto un prezzo potrebbe essere anche superiore a 1.50 o 20.58 ad esempio e dovrei quindi inserire ulteriori controlli per le centinaia, migliaia ecc ecc e così anche per le quantità ma
    dovresti consigliarmi tu una soluzione più professionale.
    Hai pensato ad usare il metodo indexOf() invece di substring()?
    Codice:
    if (document.art.prezzo.value.indexOf(",") >= 0) { ... }
    Citazione Originalmente inviato da gianlucaweb
    Ho notato che a volte (diciamo raramente) forse per qualche problema del browser o nel codice, nel campo descrizione pur non inserendovi nessun dato riesco ad inviare i dati ritrovandomi nella pagina php la riga senza descrizione cosa che non dovrebbe succedere. Che ne pensi?
    Qui non riesco a capire il perché: il codice sembra corretto, a parte il "quasi errore" che ti ho fatto notare al punto 1
    Citazione Originalmente inviato da gianlucaweb
    In una funzione volevo adottare una soluzione alternativa concatenando gli if.
    Visto che è possibile in javascript utilizzare il simbolo ||
    (per o) pensavo alla possibiltà di usare anche && (per e come per le query mysql) ed ottenere
    controllo di condizioni più complicate e performanti..ma non funziona.
    Sbaglio?
    Dipende da quello che vuoi fare, probabilmente hai sbagliato a scrivere l'espressione logica: scrivendo un'espressione tipo a || b || c risulterà vera se almeno uno tra a, b, c è vero, falsa se tutti e tre sono falsi. Un'espressione del tipo d && e && f risulterà invece vera se tutti e tre sono veri, falsa se almeno uno tra d, e, f risulta falso. Tieni inoltre presente che puoi sempre combinare le espressioni usando le parentesi per stabilire delle precedenze (vivamente consigliate visto che && e || hanno pari precedenza) e che, una volta stabilito da valutazioni parziali che l'espressione complessiva sarà sicuramente vera (ad esempio, se a è vero) o sicuramente falsa (ad esempio, se d è falso), le successive non vengono valutate: quest'ultima cosa torna molto utile soprattutto quando il primo controllo da fare è per non estrarre proprietà da un oggetto nullo.
    Citazione Originalmente inviato da gianlucaweb
    Ok penso di avere detto tutto. Aspetto i tuoi preziosi suggerimenti per migliorare la pagina e rendere i controlli sicuri. Inoltri potresti integrare la tua soluzione con questa pagina eliminado quello che secondo te non serve più?
    grazie
    Come ti ho scritto sopra quelle funzioni servono ad estrarre (più diligentemente) dei valori numerici da delle stringhe. Per quello che devi fare, però, se scopri se il controllo di isNaN() risulta attendibile (per la cronaca, la documentazione di DreamWeaver mi scrive che dichiara valido un numero che riesca ad essere convertito attraverso la funzione parseInt()), diventano inutili. In caso contrario, puoi sempre usarle scrivendo una di queste due righe (a seconda che ti serva un intero o un decimale):
    Codice:
    isNaN ('' + myParseInt (string))
    isNaN ('' + myParseFloat (string))
    Citazione Originalmente inviato da gianlucaweb
    ps: in un secondo momento vorrei usare anche l'autocompletamento
    (credo con ajax). Vorrei che inserendo il codice prodotti il campo descrizione richiami automaticamente (e gradualmente) il nome del prodotto dal db e viceversa inserendo il nome del prodotto (che dovrebbe
    gradualmente comparire digitando progressivamente le lettere) sia inserito automaticamente il codice relativo.

    Pensi che come è strutturata la pagina sopra si possono creare conflitti con il resto del codice javascript usando ajax?
    Per questa domanda dovresti chiedere a chi è un pochino più ferrato di me in AJAX/AHAH...

    Perdonami il post chilometrico ma almeno spero di aver risposto a tutte le tue domande...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  5. #5
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Ciao
    Per il post chilometrico non ci sono problemi, anzi ti ringrazio di
    aver affrontato così ogni passo del codice in questione.
    In alcune discussione (non solo relative alla programmazione)
    a volte mi rispondono a modo di "telegramma" non facendomi capire
    praticamente niente.

    Avrei in ogni caso ancora dei dubbi:

    "Immagino che quel controllo sia dato da xxx.value == xxx.defaultValue"
    ho provato a togliere sto pezzo ma mi dice ancora "codice non
    inserito" (capisco quasi niente di jascript comunque) se
    provo a mettere lo spazio e un numero corretto. Tu cosa proponi in alternativa al mio codice sopra?


    "Questo l'ho trovato... non mi ricordo però se il controllo di isNaN() è attendibile o ha gli stessi problemi di parseInt() e
    parseFloat() che ti ho detto sopra."

    Ma avrei comunque il problema del segno + e meno. Sbaglio? Che ne dici?


    "Hai pensato ad usare il metodo indexOf() invece di substring()?"
    Ho fatto così:

    if (document.art.quantita.value.indexOf(',') >= 0){
    alert("Per i decimali utilizzare il punto, es: 4 chili e mezzo= 4.5");
    document.art.quantita.value = "";
    document.art.quantita.focus();
    return false;
    }

    dovrebbe andare bene. Però se inserisco le centinaio o migliaia con la virgola (come 100,50
    1550,83) invece dell'avvertimento ""Per i decimali utilizzare il punto, es: 4 chili e mezzo= 4.5"
    mi ritrovo con quantità non valida, perchè?


    In caso contrario, puoi sempre usarle scrivendo una di queste due righe (a seconda che ti serva un intero o un decimale)
    ma può essere sia un intero che un decimale, non posso saperlo in anticipo
    (forse non ho capito io)

    allora come le uso
    isNaN ('' + myParseInt (string))
    isNaN ('' + myParseFloat (string))


    Grazie ancora per l'interessamento.
    Ultima modifica di gianlucaweb : 04-12-2006 alle ore 21.17.29

  6. #6
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da gianlucaweb
    ho provato a togliere sto pezzo ma mi dice ancora "codice non
    inserito" (capisco quasi niente di jascript comunque) se
    provo a mettere lo spazio e un numero corretto. Tu cosa proponi in alternativa al mio codice sopra?
    Non era quel pezzo che dovevi togliere... era l'altra condizione che dovevi sistemare. Dato che non ho trovato funzioni simili a trim() di PHP (il cui compito è quello di tranciare gli spazi iniziali e finali di una stringa), prova ad aggiungere questa funzione:
    Codice:
    function myTrim (string)
    {
       while (string.indexOf (' ') >= 0)
          string = string.substring (1, string.length)
       while (string.lastIndexOf (' ') >= 0)
          string = string.substring (0, string.length - 1)
       return string
    }
    e verifica in questo modo se il valore è stato inserito (xxx indica l'oggetto che devi verificare, per brevità):
    Codice:
    if (xxx.value == xxx.default.value) || myTrim (xxx.value) == "") { ... }
    [QUOTE=gianlucaweb]Ma avrei comunque il problema del segno + e meno. Sbaglio? Che ne dici?[/CODE]Non è che sia tanto un problema: una volta estratto il numero, basta confrontarlo con 0: se scrivi un numero con il + verrà automaticamente eliminato, se scrivi con il - puoi sempre dire "numero non valido".
    Citazione Originalmente inviato da gianlucaweb
    Ho fatto così:

    if (document.art.quantita.value.indexOf(',') >= 0){
    alert("Per i decimali utilizzare il punto, es: 4 chili e mezzo= 4.5");
    document.art.quantita.value = "";
    document.art.quantita.focus();
    return false;
    }

    dovrebbe andare bene. Però se inserisco le centinaio o migliaia con la virgola (come 100,50
    1550,83) invece dell'avvertimento ""Per i decimali utilizzare il punto, es: 4 chili e mezzo= 4.5"
    mi ritrovo con quantità non valida, perchè?
    ? ?? ???? ???????? Non ne ho la più pallida idea... quel codice lì dovrebbe proprio visualizzare l'alert sui decimali quando trova una virgola all'interno della stringa (questo perché indexOf() restituisce -1 in caso contrario). Ti posso però dire che "Quantità non valida" esce dall'unione di tre condizioni, cioè una di queste deve essere vera:
    - il valore nel campo non è un numero (o, almeno, le prime cifre non sono numeriche)
    - il primo carattere della stringa è un "-"
    - il primo carattere della stringa è un "+"
    Citazione Originalmente inviato da gianlucaweb
    ma può essere sia un intero che un decimale, non posso saperlo in anticipo
    (forse non ho capito io)

    allora come le uso
    isNaN ('' + myParseInt (string))
    isNaN ('' + myParseFloat (string))


    Grazie ancora per l'interessamento.
    Allora, quando non sai se il tipo di dato sarà sicuramente un intero (come, facendo un esempio ormai "obsoleto", un prezzo in lire), ricorda che gli interi sono compresi nei decimali e quindi puoi usare parseFloat() o myParseFloat(). Se ti può interessare, né JavaScript né PHP distinguono effettivamente il tipo intero da quello decimale (come in altri linguaggi di programmazione, ad esempio Java e C).

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  7. #7
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Boh! Adesso il codice:

    if (document.art.quantita.value.indexOf(',') >= 0){
    alert("Per i decimali utilizzare il punto, es: 4 chili e mezzo= 4.5");
    document.art.quantita.value = "";
    document.art.quantita.focus();
    return false;
    }

    funziona bene.
    Questo comportamento strano in merito all'aggiornamento del codice
    javascript l'ho riscontrato altre volte, nonostante salvi la pagina modificata
    faccia l'aggiornamento della pagina nel browser (anzi a volte
    lo chiudo e riapro)..Veramente strano. Ti risulta?


    In ogni caso purtroppo, la modifica e la funzione da te suggerita per
    risolvere il problema dello spazio non va (non saprei comunque perchè).
    la finestra riporta ancora "nessun codice inserito".

    Grazie

    [DS] Non inviare messaggi consecutivi, usa la funzione EDIT del forum...
    Ultima modifica di dementialsite : 06-12-2006 alle ore 11.58.00

  8. #8
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito ajax crea problemi

    Per ottenere l'autocompletamento nel campo descrizione del form della
    pagina html sotto ho usato ajax.


    Ho praticamente adattato il codice di questi file in questa pagina(molto interessante il sito):

    http://www.dhtmlgoodies.com/index.ht...x-dynamic-list
    La mia pagina articoli.html 8già oggetto di discussione qui:
    Ho unito le due discussioni)
    è diventata così:

    Codice:
    <html>
    <head>
    <title>Form dati</title>
    <style type="text/css">
    	/* Big box with list of options */
    	#ajax_listOfOptions{
    		position:absolute;	/* Never change this one */
    		width:175px;	/* Width of box */
    		height:250px;	/* Height of box */
    		overflow:auto;	/* Scrolling features */
    		border:1px solid #317082;	/* Dark green border */
    		background-color:#FFF;	/* White background color */
    		text-align:left;
    		font-size:0.9em;
    		z-index:100;
    	}
    	#ajax_listOfOptions div{	/* General rule for both .optionDiv and .optionDivSelected */
    		margin:1px;		
    		padding:1px;
    		cursor:pointer;
    		font-size:0.9em;
    	}
    	#ajax_listOfOptions .optionDiv{	/* Div for each item in list */
    		
    	}
    	#ajax_listOfOptions .optionDivSelected{ /* Selected item in the list */
    		background-color:#317082;
    		color:#FFF;
    	}
    	#ajax_listOfOptions_iframe{
    		background-color:#F00;
    		position:absolute;
    		z-index:5;
    	}
    	
    	form{
    		display:inline;
    	}
    	
    	</style>
    	<script type="text/javascript" src="js/ajax.js"></script>
    	<script type="text/javascript" src="js/ajax-dynamic-list.js"></script>
    <SCRIPT LANGUAGE='JavaScript'>
    <!--
    function validate_form()
    {
    
        if (document.art.codice.value==document.art.codice.defaultValue ||
        document.art.codice.value.indexOf(' ',0)==0)
        {
            alert('\nNessun codice inserito.')
            document.art.codice.select()
            document.art.codice.focus()
            return false
        }
          if ((isNaN(document.art.codice.value)) ||  document.art.codice.value.indexOf('-',0)==0 ||  document.art.codice.value.indexOf('+',0)==0) {
       alert("Codice non valido.");
       document.art.codice.value = "";
       document.art.codice.focus();
       return false;
            }
    
        if (document.art.descrizione.value==document.art.descrizione.defaultValue ||
        document.art.descrizione.value.indexOf(' ',0)==0)
        {
            alert('\nNessuna descrizione inserita.')
            document.art.descrizione.select()
            document.art.descrizione.focus()
            return false
        }
    
        if (document.art.quantita.value==document.art.quantita.defaultValue ||
        document.art.quantita.value.indexOf(' ',0)==0)
        {
            alert('\nNessuna quantità inserita.')
            document.art.quantita.select()
            document.art.quantita.focus()
            return false
        }
    
        if (document.art.quantita.value.indexOf(',') >= 0){
       alert("Per i decimali utilizzare il punto, es: 4 chili e mezzo= 4.5");
       document.art.quantita.value = "";
       document.art.quantita.focus();
       return false;
            }
    
         if ((isNaN(document.art.quantita.value))|| document.art.quantita.value.indexOf('-',0)==0 ||  document.art.quantita.value.indexOf('+',0)==0) {
       alert("Quantità non valida.");
       document.art.quantita.value = "";
       document.art.quantita.focus();
       return false;
            }
    
    
    
    
        if (document.art.prezzo.value==document.art.prezzo.defaultValue ||
        document.art.prezzo.value.indexOf(' ',0)==0)
        {
            alert('\nNessun prezzo inserito.')
            document.art.prezzo.select()
            document.art.prezzo.focus()
            return false
        }
    
         if (document.art.prezzo.value.indexOf(',') >= 0){
       alert("Per i decimali utilizzare il punto, es: 3 euro e 55 cent = 3.55");
       document.art.prezzo.value = "";
       document.art.prezzo.focus();
       return false;
    }
    
    
         if ((isNaN(document.art.prezzo.value))|| document.art.prezzo.value.indexOf('-',0)==0 ||  document.art.prezzo.value.indexOf('+',0)==0) {
       alert("Prezzo non valido.");
       document.art.prezzo.value = "";
       document.art.prezzo.focus();
       return false;
            }
    
    }
    //----------------------------------------
    // -->
    </SCRIPT>
    </head>
    
    <body bgcolor="#DAB88B" onload="document.art.codice.focus();" >
    <TABLE border=0 width=100% cellpadding=3>
    <tr>
    <td width=100% colspan=2>
    <p align=center><b>Inserisci Articoli
    <form method=POST action="fatt1.php" target= "fatt1" name = "art" onSubmit="return validate_form()">
    </b></td>
    </tr>
    <tr>
    <td width=18%><b>Codice</b></td>
    <td width=82%><input type=text name="codice" size=10></td>
    </tr>
    <tr>
    <td width=18%><b>Descrizione</b></td>
    <td width=72%><input type="text" id="descrizione" name="descrizione" value="" onkeyup="ajax_showOptions(this,'getCountriesByLetters',event)">
    <input type="hidden" name="descrizione"></td>
    </tr>
    <tr>
    <td width=18%><b>Quantità</td>
    <td width=82%><input type=text name="quantita"  size=10></td>
    </tr>
    <tr>
    <td width=18%><b>Prezzo Un.</td>
    <td width=82%><input type=text name="prezzo"  size=10></td>
    </tr>
    <tr>
    <tr>
    <td width=18%><b>IVA</td>
    <td width=82%><select size="1" name="iva"  size=10>
      <option> 4</option>
      <option> 10</option>
      </select></td>
    </tr>
    <tr>
    <td width=18%><b><input type="submit" name="invia" value="Inserisci"></td>
    </tr>
    </table>
    </form>
    </body>
    </html>
    ovviamente ho creato una tabella prodotti nel db con i campi id, codice, descrizione. per il resto
    ho usato gli stessi file di riferimento in js e php (non ho cambiato nemmeno i nomi delle funzioni)
    Funziona, ma ci sono (almeno per il momento ho notato "SOLO" questi) 2 problemi.

    Il nome della descrizione non viene inviato alla pagina php,
    e poi se non compilo il campo descrizione e clicco sul bottone invia, la finestra di avvertimento javascript mi dice che il
    campo è vuoto e mi rimanda il cursore su questo campo ma immediatamente dopo
    i dati vengono inviati lo stesso (senza la descrizione appunto)
    Aiuto!
    ciao


    EDIT: adesso funziona tutto

    ho eliminato questa riga:

    <input type="hidden" name="descrizione">
    Ho riaggiornato la pagina e fatto prima ancora una bella pulizia della cache
    (ho notato che a volte le modifiche al codice javascript non vengono rilevate
    subito pur salvando e aggiornando la pagina...boh!)

    adesso però vorrei implementare il form
    e fare in modo che quando inserisco la descrizione dell'articolo sia richiamato
    anche il suo codice relativo nel campo codice appunto.
    E' possibile?
    grazie


    FunCool: Non scrivere due messaggi consecutivi, utilizza il tasto Edita.
    Ultima modifica di funcool : 12-12-2006 alle ore 17.55.48

  9. #9
    nextage non è connesso Utente giovane
    Data registrazione
    03-05-2005
    Messaggi
    40

    Predefinito

    Io in realtà ti sconsiglierei ajax.
    Per quanto adori javascript (ci faccio anche videogiochi) ajax non mi piace.
    A parte che il codice non è molto sicuro (essendo eseguito tutto lato client, chiunque puo leggere come fare date operazione guardando il codice javascript).
    Io l'avevo usato per una chat... a parte appunto il problema di sicurezza (chiunque poteva spacciarsi per un altro utente e scrivere al suo posto), poi provata in locale o con una buona connessione poteva anche starci, ritestata con 56k facevo il submit per il login, sembrava nn stesse facendo nulla (perchè la chiamata è nascosta) e pure io che nn sono il "tipico utente capra" pensavo nn mi avese preso il post e così l'ho rifatto piu volte.
    Risultato: mi ha loggato e poi (come impostato da script) mi segnalava che il nick era gia in uso e mi sloggava.
    Ok, basterebbe avere pazienza, ma gia solo per questo esempio mi è passata ogni voglia di usarlo.
    In teoria potrebbe succedere anche nel tuo caso.

    Ps il javascript linkato (quello con src="nomefile.js" per intenderci) funziona come per i css e le img, nn viene ricaricato anche se dici che la pagina php è scaduto - tramite header - l'unico modo per ricaricarlo a priori è cambiare il file che lo contiene cosi che venga ricaricato ex novo e lo rimetta, oppure cambiare il nome al file linkato (ma può essere una rottura), o far scrivere dinamicamente a php il codice per linkarlo (tipo echo "<script....></script>")
    Ultima modifica di nextage : 11-12-2006 alle ore 20.35.56

  10. #10
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Citazione Originalmente inviato da nextage
    Io in realtà ti sconsiglierei ajax.
    Per quanto adori javascript (ci faccio anche videogiochi) ajax non mi piace.
    A parte che il codice non è molto sicuro (essendo eseguito tutto lato client, chiunque puo leggere come fare date operazione guardando il codice javascript).
    Io l'avevo usato per una chat... a parte appunto il problema di sicurezza (chiunque poteva spacciarsi per un altro utente e scrivere al suo posto), poi provata in locale o con una buona connessione poteva anche starci, ritestata con 56k facevo il submit per il login, sembrava nn stesse facendo nulla (perchè la chiamata è nascosta) e pure io che nn sono il "tipico utente capra" pensavo nn mi avese preso il post e così l'ho rifatto piu volte.
    Risultato: mi ha loggato e poi (come impostato da script) mi segnalava che il nick era gia in uso e mi sloggava.
    Ok, basterebbe avere pazienza, ma gia solo per questo esempio mi è passata ogni voglia di usarlo.
    In teoria potrebbe succedere anche nel tuo caso.

    Ps il javascript linkato (quello con src="nomefile.js" per intenderci) funziona come per i css e le img, nn viene ricaricato anche se dici che la pagina php è scaduto - tramite header - l'unico modo per ricaricarlo a priori è cambiare il file che lo contiene cosi che venga ricaricato ex novo e lo rimetta, oppure cambiare il nome al file linkato (ma può essere una rottura), o far scrivere dinamicamente a php il codice per linkarlo (tipo echo "<script....></script>")
    Ok, ma lo uso solo in locale per il momento quindi non ci sono problemi di sicurezza.
    In pratica sto creando un modulo per la fatturazione di articoli.
    Se ho capito bene per il problema dell'aggiornamento della pagina dovrei richiamare il codice o meglio il file tramite php?

    Ah, e per ciò che riguarda l''implementazione che voglio realizzare?

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •