Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Validare un form di cui si ignorano i nomi dei campi

    Recentemente per validare un form tramite JS comincio ad usare una cosa del genere:
    codice:
    function check_valid(form) {
    // anagrafe
        if (form.nome.value == "") { // nome
            alert ("Il campo del nome è vuoto");
            form.nome.value = "";
            form.nome.focus();
            return false;
        }
        if (form.cognome.value == "") { // cognome
            alert ("Il campo del cognome è vuoto");
            form.cognome.value = "";
            form.cognome.focus();
            return false;
        }
        if (form.citta.value == "") { // città
            alert ( "Il campo della città è vuoto");
            form.citta.value = "";
            form.citta.focus();
            return false;
        }
        ..........................
        return true;
    }
    La form è costruita manualmente e posso richiamare la funzione JS in questo moso:
    codice:
    <form name="form1" method="post" action="invia_form.php" onsubmit="return check_valid(this)" id="form1">
    <input type="text" name="nome" size="30" />
    <input type="text" name="cognome" size="30" />
    <input type="text" name="citta" size="30" />
    .......................
    </form>
    La cosa mi piace anche perchè usando il JS la pagina non viene ricaricata con tutto quel che segue (una fra le tante, la perdita di dati già inseriti)

    Questa volta il problema è un altro.
    Il form non lo scrivo manualmente ma usando semplicemente un ciclo dopo aver rilevato i campi dal DB con una Query e viene scritto in questo modo:
    codice:
    echo "<form id=\"form1\" name=\"form1\" method=\"post\" action=\"\"onsubmit=\"check(this);\">\n";
    for ($i=1; $i < mysql_num_fields ($Result); $i++) {     // comincio da 1 perchè lo "0" è il campo ID
    	$colonna = mysql_field_name ($Result, $i);
    	if ($colonna == "note") {
    		echo "<textarea name=\"".$colonna."\" cols=\"33\" rows=\"5\"></textarea>\n";
    	} else {
    		echo "<input type=\"text\" name=\"".$colonna."\" size=\"44\" />\n";
    	}
    }
    ....................................
    echo "</form>\n";
    In questo modo so solo che un campo si chiama "note", ma per il resto è tutto buio.
    Io penso che ci dovrebbe essere un modo per leggere i controlli del form da JS e controllare se i dati sono validi.

    Grazie per l'aiuto che riceverò

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Come spunto usa il dom con document.getElementsByTagName tipo:
    nel caso che i campi testo siano tutti obbligatori:
    <script>
    function check(){
    var element = document.getElementsByTagName("input");
    for(var i=0; i<element.length; i++){
    if(element[i].type=='text' && element[i].value==''){
    alert('Compila il capo'+element[i].name)
    return false;
    }......
    </script>
    da richiamare cosi onsubmit=\"return check();\"
    nel caso che i campi non sia tutti obbligatori, dovrai inserire una classe nel campo da controllare per distinguerli.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    ciao cavicchiandrea
    ti ringrazio tantissimo per la risposta. L'ho testata e funziona.
    Tuttavia nella prima prova veloce che ho fatto la funzione mi legge tutte le caselle di testo, ma non legge la textarea. Infatti riempite tutte le caselle di testo, ma non la textarea il form viene inviato senza alcun messaggio.
    Poi non ho capito una cosa:
    nel caso che i campi non sia tutti obbligatori, dovrai inserire una classe nel campo da controllare per distinguerli.
    In questo caso debbo cambiare anche il codice?

    Grazie per le delucidazioni e a presto

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Per verificare la textarea (nel caso che ci sia solo una textarea) puoi fare cosi if(document.getElementsByTagName("textarea")[0].value==''){alert('.....');return false;}.
    Come ho detto se non hai tutti i campi obbligatori, quelli obbligatori dovrai distinguerli con una classe tipo:
    echo "<textarea class=\"nomeClasse\" name=\"".$colonna."\" cols=\"33\" rows=\"5\"></textarea>\n";
    che controllerai cosi:
    if(document.getElementsByTagName("textarea")[0].nameClass=='nomeClasse'){
    documentati qui
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    ciao cavicchiandrea
    ho provato a modificare lo script più o meno come mi hai suggerito.
    Per testare il tutto ho aggiunto nel form anche due controlli senza la classe per cercare di controllare solo i campi obbligatori. Purtroppo non riesco a gestire bene il codice di controllo.

    Per facilitare l'aiuto mostro la pagina intera per testare il codice e la stessa pagina in formato .txt per permettere di leggerne il codice PHP

    Spero tanto che riusciamo a risolvere il problema. Grazie ancora per l'aiuto

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Mi sono sbagliato per controllare la classe è "className"
    if(element[i].className=='si' && element[i].value=='' && element[i].type == 'oggetto')
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Perfetto ora funziona perfettamente, grazie tante per la pazienza.
    Ho provato anche a cambiare le classi per i controlli.

    Grazie tantissime

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.