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

    Invia form solo se tutto compilato

    Ciao,

    come faccio per avere il tasto submit disattivato e che si attiva solo quando tutti i campi del modulo sono compilati?

    Grazie!
    http://www.ecogiochi.it - il primo blogames del pianeta
    http://www.grogonet.com - Grog on network

  2. #2
    controlli che ogni campo sia compilato, con javascript, e tieni un contatore
    es.
    var contatore = 0
    function controllanome(){
    var nome = document.form.nome.value
    if (nome !=0 && nome != " " eccetera)
    contatore +=1
    ecc
    controllacontatore()
    }
    il pulsante per inviare i dati lo tieni disabilitato (con disabled="true")
    la funzione controllacontatore conterrà appunto il controllo sul contatore (ad esempio hai 10 elementi da controllare, prima di abilitare il pulsante, metti una if che controlla che la variabile contatore sia arrivata a 10, se succede abiliti il pulsante con dom (mettendo disabled="false"), altrimenti non succede niente.
    E' una soluzione che non ho provato, mi è venuta in mente adesso leggendo il tuo post, infatti non sono sicuro che funzioni, però lavorandoci su qualcosa ne esce fuori. Ti assicuro che non è una soluzione performante (perchè deve andare a controllare per ogni oggetto lo stato del contatore). Magari qualcuno ti da una risposta migliore, ma intanto puoi lavorare su questo.
    Faccio qualche prova e ti faccio sapere, ciao.

  3. #3
    grazie Peppeocchi,

    non è che riusciresti a scrivermi un miniesempio anche con un campo solo?
    non sono troppo ferrato su javascript...
    http://www.ecogiochi.it - il primo blogames del pianeta
    http://www.grogonet.com - Grog on network

  4. #4
    L'ho fatto in due minuti, ho riscontrato problemi con la proprietà disabled, che evidentemente non se ne va una volta impostata (neanch'io sono così ferrato in javascript)
    Ti ripeto che come soluzione non è affatto performante, ma è solo la prima che mi è venuta in mente.
    Se hai problemi, a disposizione.
    Magari qualcuno posta qualcosa di più performante....Ciao!

    codice:
    <html>
    <head>
    <script type="text/javascript">
    var cont = 0;
    function cnome(){
    var nome = document.f1.nome.value
    if(nome != " ")
    cont +=1;
    ccont();
    }
    function ccont(){
    if (cont  == 1)
    document.getElementById("invia").innerHTML="<input id='sub' type='submit' value='Invia' />"
    }
    
    </script>
    </head>
    <body onload="ccont()">
    <form name="f1" method="POST" action="register.php">
    Nome <input type="text" name="nome" size="10" onblur="cnome()" />
    <span id="invia"><input type='submit' disabled='true' value='Invia' /></span>
    </form>
    </body>
    </html>
    edit:
    il pulsante si abilita solo quando si esce dalla casella in cui si è (onblur)

  5. #5
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,132
    Prova questo, che obbliga a riempire tutti i campi testo presenti nella form
    codice:
    <html>
    <head>
    
    <script type="text/javascript">
    function abilita(){
    var elem = document.getElementsByTagName("input");
    var N_elem = elem.length;
    for(var i = 0; i<elem.length; i++){
    if(elem[i].value.length > 0 )N_elem--
    if(N_elem == 0)document.getElementById("pulsante").removeAttribute("disabled")
    else document.getElementById("pulsante").setAttribute("disabled","disabled")
    }}
    </script>
    </head>
    <body>
    <form name="f1" method="POST" action="register.php">
    Nome <input type="text" name="nome" size="10" onkeyup="abilita()" />
    Cognome <input type="text" name="cognome" size="10" onkeyup="abilita()" />
    
    <input type="submit" disabled name="pulsante" id="pulsante" value="Invia" />
    </form>
    </body>
    </html>
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  6. #6
    Non è un po' eccessivo richiamare la funzione ad ogni carattere digitato? Cioè, se ho un form con 10 campi, e ognuno di essi ha un minimo di 5 caratteri (direi anche 10 caratteri), la funzione viene richiamata 50/100 volte. Considerando anche che non ha nessuna variabile di controllo per evitare di addentrarsi nella funzione, e vuol dire che per 50/100 volte conta gli input, entra nel for, cicla 10 volte, e al suo interno un if che cicla chissà quante altre volte ripetendo sempre la stessa cosa (da quanto ho capito entra ad ogni giro settando sempre a disabled il submit, per ogni carattere premuto).
    Considerando anche che in un form di registrazione (penso si tratti di questo), non bastano i controlli fatti per i campi in generale, ma ne servono di specifici (come ad esempio il formato dell'email, la lunghezza minima di username, la lunghezza minima della password, caratteri esclusi per la password).
    Penso che separando in più pezzetti, cioè funzioni relative ad ogni campo, con un contatore che indica se ci sono campi incompleti o no, si possa raggiungere un buon risultato (di sicuro non come ho implementato io quest'idea, che è veramente pessima )

    Qualcosa di più performante? Tempo fa ho fatto un sistema di validation form onthefly, ma non ero riuscito ad implementare anche la disabilitazione/abilitazione del submit (o meglio, non ho voluto implementarlo perchè si poneva lo stesso problema di questa funzione, cioè un eccessivo carico di chiamate della funzione, e data l'urgenza della consegna, ho lasciato perdere la ricerca per la risoluzione del problema).
    Adesso sto lavorando ad un altro progetto, e non sarebbe male implementare qualcosa di performante per l'abilitazione/disabilitazione del submit, unito al validation form che già ho.

    Qualcuno ha qualche idea?

  7. #7
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,132
    @peppeocchi
    Il mio intervento è limitato al solo fatto che la tua funzione non funzionava (scusa il bisticcio ) a dovere (attiva il pulsante anche senza digitare nessun carattere facendo entra/esci dal campo) probabilmente dovuta alla fretta, ho utilizzato onkeyup per le prove basta sostiture con onblur (come nel tuo caso)
    E una cosa butata giù al volo se occorre qulcosa che verifichi lunghezza valore formato etc.. oppure tipo di oggetto (radio,select,etc..) penso si dovrebbe lavore sulle classi (come fanno alcune validazioni immediate).
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  8. #8
    Cavolo hai ragione, non l'avevo notato, anzi, non l'ho neanche provato (o quasi).... maledette condizioni :master:

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.