2013-07-25 13 views
11

La soluzione dovrebbe essere piuttosto semplice. Sto cercando di impedire che il modulo venga inviato correttamente quando non viene trovato alcun valore nelle caselle di input. Ecco il mio JSFiddle: http://jsfiddle.net/nArYa/7/Utilizzo di jQuery per impedire l'invio di moduli quando i campi di input sono vuoti

// Markup

<form action="" method="post" name="form" id="form"> 
<input type="text" placeholder="Your email*" name="email" id="email"> 
<input type="text" placeholder="Your name*" autocomplete=off name="name" id="user_name" 
<button type="submit" id="signup" value="Sign me up!">Sign Up</button> 
</form> 

// jQuery

if ($.trim($("#email, #user_name").val()) === "") { 
    $('#form').submit(function(e) { 
     e.preventDefault(); 
     alert('you did not fill out one of the fields'); 
    }) 
} 

Come si può vedere nel JSFiddle, il problema è che quando si digita qualcosa in entrambi i campi, il casella di avviso ANCORA si apre. Sto avendo difficoltà a capire perché. C'è qualcosa di sbagliato nel mio se ($. Trim ($ "# email, #user_name"). Val()) === "")?

+1

Sì, si dovrebbe verificare ciascuno di essi individualmente, se si utilizza un solo selettore, un solo valore verrà restituito –

+1

Dalla documentazione: Prendi il valore corrente del ** prima ** elemento nel set di elementi corrispondenti – Barmar

+1

È necessario allegare una funzione javascript al pulsante di invio.

risposta

23

due cose, # 1 il controllo per i campi vuoti che accade sulla ogni tentativo di presentare, # 2 è necessario controllare ogni campo individualmente

$('#form').submit(function() { 
    if ($.trim($("#email").val()) === "" || $.trim($("#user_name").val()) === "") { 
     alert('you did not fill out one of the fields'); 
     return false; 
    } 
}); 

Updated fiddle

+0

Sta funzionando direttamente implementando il codice if ($ .trim ($ ("# email"). Val()) === "" || $ .trim ($ ("# nome_utente").val()) === "") { alert ('non hai compilato uno dei campi'); return false; } – gnganpath

5

Il controllo si verifica al caricamento della pagina. È necessario controllare il campo quando viene inviato il modulo.

$('#form').submit(function(e) { 
    if ($.trim($("#email, #user_name").val()) === "") { 
     e.preventDefault(); 
     alert('you did not fill out one of the fields'); 
    } 
}); 
1

Metti la tua istruzione if all'interno del callback:

$('#form').submit(function(e) { 
    if ($.trim($("#email").val()) === "" || $.trim($("#user_name").val())) { 
     e.preventDefault(); 
     alert('you did not fill out one of the fields'); 
     //You can return false here as well 
    } 
}); 
+0

Questa non è la risposta giusta, verrà inviata anche se il nome utente è vuoto –

2

Credo che questo aiuterà:

$('#form').submit(function(e) { 
    e.preventDefault(); 
    $("#email, #user_name").each(function(){ 
     if($.trim(this.value) == ""){ 
      alert('you did not fill out one of the fields'); 
     } else { 
      // Submit 
     } 
    }) 
}) 
2

HTML5: utilizzare richiesto nel tag input

  • Un attributo booleano.

  • Il campo di inserimento deve essere compilato prima del per inviare il modulo.

  • Funziona con testo, ricerca, url, telefono, email, password, selezione data, numero, casella di controllo, radio e file.

    <input required type='text'...> 
    

w3schools hint

+1

Che ne dici di inserire solo spazi? Ho appena usato questo, ma lo invio ancora quando si inseriscono spazi vuoti nei campi di input. –

+1

Quindi è possibile utilizzare l'attributo Pattern insieme a richiesto. http://www.felgall.com/html5r.htm ti aiuterà. (non supportato dal browser safari) – Elnaz

Problemi correlati