2015-12-23 8 views
5

Sto cercando di creare una semplice applicazione web. Nella mia pagina di accesso ho un modulo con un campo di testo, una password e un pulsante di invio. L'invio del modulo è impedito se entrambi i campi sono vuoti. Questo è lo script che uso:C'è un modo per invertire la sospensione della presentazione del modulo o sarà meglio non averlo fatto in primo luogo?

function checkLoginCredentials() { 
    var usernameFormValue = $("#usernameForm").val().trim(); 
    var passwordFormValue = $("#passwordForm").val().trim(); 
    var validated; 


    $("#loginForm").submit(function(event){ 
     if (usernameFormValue === "" || passwordFormValue === "") { 
      $("span").html("Enter a username or password"); 
      validated = false 
     } else { 
      validated = true; 
     } 
     return validated; 
    }); 
} 

Tuttavia, ho notato che una volta che lo script viene eseguito e invio del modulo è impedito, l'utente non può più fare un tentativo di accedere nuovamente. L'unica alternativa che posso pensare è di avere TUTTE le convalide fatte dal mio servlet di accesso e classi di utilità. C'è un modo per aggirare questo o le convalide di voci non valide come le stringhe vuote devono essere eseguite dalle mie classi Java?

+0

non è sufficiente aggiungere gli attributi 'required' allo s e chiamarlo un giorno? JS rende solo questo complicato ... – dandavis

+1

Il moderno browser supporta la convalida HTML5, quindi non è necessario alcun JavaScript e dovresti anche eseguire tutte le convalide sul server. – epascarello

+0

Come viene chiamato 'checkLoginCredentials'? Comunque lo stai facendo è qual è il problema. – epascarello

risposta

5

Il problema qui è come si assegna il codice di convalida. Hai un checkLoginCredentials e quando lo chiami, leggi i valori del modulo. E poi aggiungi una sottomissione di modulo. È necessario aggiungere la lettura dei valori della casella di testo all'interno del metodo di invio, non all'esterno.

$("#loginForm").submit(function(event){ 

    var usernameFormValue = $("#usernameForm").val().trim(), 
     passwordFormValue = $("#passwordForm").val().trim(), 
     validated; 

    if (usernameFormValue === "" || passwordFormValue === "") { 
     $("span").html("Enter a username or password"); 
     validated = false 
    } else { 
     validated = true; 
    } 
    return validated; 
}); 
+0

Provato quello che hai suggerito e ha funzionato. Grazie! Se va bene puoi spiegare perché ho avuto il problema di rielaborazione del modulo? – Nate

+0

Quando si chiama checkLoginCredentials si associa un gestore di eventi all'elemento e si memorizza il valore in quel momento. Le variabili non hanno sempre il valore più recente, pertanto il gestore eventi che si allega ha sempre il valore originale e non si aggiornerà. Se dovessi chiamare checkLoginCredentials, ricollegherei nuovamente, non sovrascriverà l'ultimo, lo aggiungerà allo stack in modo che la chiamata continui a fallire e annulli. – epascarello

Problemi correlati