2015-12-23 13 views
5

Próbuję zrobić prostą aplikację internetową. Na mojej stronie logowania mam formularz z polem tekstowym, hasłem i przyciskiem przesyłania. Przesyłanie formularzy jest zablokowane, jeśli którekolwiek z pól są puste. Jest to skrypt używać:Czy istnieje sposób, aby cofnąć zawieszenie składania formularzy, czy też lepiej nie robić tego w pierwszej kolejności?

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; 
    }); 
} 

, zauważyłem jednak, że po uruchomieniu skryptu i złożenie formularza jest zapobiegać, użytkownik nie może już podjąć próbę zalogowania się ponownie. Jedyną alternatywą, jaką mogę wymyślić, jest wykonanie WSZYSTKICH sprawdzeń przez mój serwlet logowania i klasy narzędziowe. Czy istnieje sposób obejścia tego lub musi być sprawdzana poprawność nieprawidłowych wpisów, takich jak puste ciągi, przez moje klasy Java?

+0

nie można po prostu dodać 'required' przypisuje s i nazywają to dzień? JS sprawia, że ​​jest to skomplikowane ... – dandavis

+1

Współczesna przeglądarka obsługuje sprawdzanie poprawności HTML5, więc JavaScript nie jest potrzebny i powinieneś także wykonywać wszystkie walidacje na serwerze. – epascarello

+0

Jak wywoływane jest 'checkLoginCredentials'? Jednak robisz to, co jest problemem. – epascarello

Odpowiedz

5

Problem w tym, w jaki sposób przypisujesz kod weryfikacyjny. Masz numer checkLoginCredentials, a po jego wywołaniu odczytujesz wartości formularza. A następnie dodaj zgłoszenie formularza. Powinieneś dodać odczyt wartości pola tekstowego wewnątrz metody przesyłania, a nie na zewnątrz.

$("#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

Wypróbowałem, co zasugerowałeś i zadziałało. Dzięki! Jeśli wszystko jest w porządku, czy możesz wyjaśnić, dlaczego miałem problem z ponownym przesłaniem formularza? – Nate

+0

Po wywołaniu checkLoginCredentials wiążemy procedurę obsługi zdarzeń z elementem i zapisujemy wartość w tym momencie. Zmienne nie zawsze mają najnowszą wartość, dlatego dołączona obsługa zdarzeń zawsze ma oryginalną wartość i nie będzie aktualizowana. Jeśli miałbyś wywołać checkLoginCredentials, ponownie zwiążesz przesyłanie, nie zastąpi on ostatniego, dodaje go do stosu, więc wywołanie nadal się nie udaje i anuluje. – epascarello