2015-12-23 11 views
5

Tôi đang cố gắng tạo một ứng dụng web đơn giản. Trong trang đăng nhập của tôi, tôi có một biểu mẫu với một trường văn bản, một mật khẩu và một nút gửi. Việc gửi biểu mẫu được ngăn chặn nếu một trong hai trường trống. Đây là tập lệnh tôi sử dụng:Có cách nào để đảo ngược việc đình chỉ việc gửi biểu mẫu hay không tốt hơn là không nên thực hiện ngay từ đầu?

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

Tuy nhiên, tôi nhận thấy rằng khi chạy tập lệnh và gửi biểu mẫu, người dùng không còn có thể cố đăng nhập lại. Cách thay thế duy nhất tôi có thể nghĩ là có tất cả các xác nhận hợp lệ được thực hiện bởi servlet đăng nhập và các lớp tiện ích của tôi. Có cách nào xung quanh này hoặc phải xác nhận hợp lệ các mục không hợp lệ như chuỗi rỗng được thực hiện bởi các lớp Java của tôi?

+0

bạn không thể chỉ thêm thuộc tính 'required' vào và gọi nó là một ngày? JS chỉ làm cho điều này phức tạp ... – dandavis

+1

Trình duyệt hiện đại hỗ trợ xác thực HTML5 nên JavaScript không thực sự cần thiết và bạn cũng nên thực hiện tất cả xác thực trên máy chủ. – epascarello

+0

'checkLoginCredentials' được gọi là gì? Tuy nhiên bạn đang làm nó là vấn đề là gì. – epascarello

Trả lời

5

Vấn đề ở đây là cách bạn chỉ định mã xác nhận. Bạn có một số checkLoginCredentials và khi bạn gọi nó, bạn đọc các giá trị biểu mẫu. Và hơn bạn thêm một biểu mẫu gửi. Bạn nên thêm việc đọc các giá trị của hộp văn bản bên trong phương thức gửi, không phải bên ngoài.

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

Đã thử những gì bạn đề xuất và nó đã hoạt động. Cảm ơn! Nếu không sao bạn có thể giải thích tại sao tôi lại gặp vấn đề gửi lại biểu mẫu? – Nate

+0

Khi bạn gọi checkLoginCredentials bạn liên kết một trình xử lý sự kiện với phần tử và bạn lưu trữ giá trị tại thời điểm đó. Các biến không phải lúc nào cũng có giá trị mới nhất do đó trình xử lý sự kiện bạn đính kèm luôn có giá trị ban đầu và sẽ không cập nhật. Nếu bạn đã gọi checkLoginCredentials, bạn sẽ ràng buộc gửi lại, nó không ghi đè lên lần cuối cùng, nó gắn nó vào ngăn xếp để cuộc gọi vẫn không thành công và hủy bỏ. – epascarello

Các vấn đề liên quan