Tôi tìm thấy một giải pháp hoàn chỉnh cho câu hỏi này. (Tôi đã thử nghiệm điều này trong Chrome 27 và Firefox 21).
Có hai điều cần biết:
- Kích hoạt 'Lưu mật khẩu' và
- Khôi phục tên người dùng / mật khẩu đã lưu
1. Kích hoạt 'Lưu mật khẩu':
Đối với Firefox 21 , 'Lưu mật khẩu' được kích hoạt khi phát hiện thấy có một biểu mẫu chứa trường văn bản đầu vào và trường mật khẩu đầu vào được gửi. Vì vậy, chúng ta chỉ cần sử dụng
$('#loginButton').click(someFunctionForLogin);
$('#loginForm').submit(function(event){event.preventDefault();});
someFunctionForLogin()
không đăng nhập ajax và tải lại / chuyển hướng đến trang đã đăng nhập trong khi event.preventDefault()
chặn chuyển hướng ban đầu do gửi biểu mẫu.
Nếu bạn chỉ giao dịch với Firefox, giải pháp trên là đủ nhưng nó không hoạt động trong Chrome 27. Sau đó, bạn sẽ hỏi cách kích hoạt 'Lưu mật khẩu' trong Chrome 27.
Đối với Chrome 27 , 'Lưu mật khẩu' được kích hoạt sau khi được chuyển hướng đến trang bằng cách gửi biểu mẫu có chứa trường văn bản đầu vào với tên thuộc tính = 'tên người dùng' và trường mật khẩu nhập với tên thuộc tính = 'mật khẩu' . Do đó, chúng tôi không thể chặn chuyển hướng do gửi biểu mẫu nhưng chúng tôi có thể thực hiện chuyển hướng sau khi chúng tôi thực hiện đăng nhập ajax. (Nếu bạn muốn đăng nhập ajax không tải lại trang hoặc không chuyển hướng đến một trang, thật không may, giải pháp của tôi không hoạt động.) Sau đó, chúng tôi có thể sử dụng
<form id='loginForm' action='signedIn.xxx' method='post'>
<input type='text' name='username'>
<input type='password' name='password'>
<button id='loginButton' type='button'>Login</button>
</form>
<script>
$('#loginButton').click(someFunctionForLogin);
function someFunctionForLogin(){
if(/*ajax login success*/) {
$('#loginForm').submit();
}
else {
//do something to show login fail(e.g. display fail messages)
}
}
</script>
Nút có kiểu = 'nút' sẽ khiến biểu mẫu không được gửi khi nhấp vào nút. Sau đó, liên kết một chức năng với nút để đăng nhập ajax. Cuối cùng, gọi $('#loginForm').submit();
chuyển hướng đến trang đăng nhập. Nếu trang đăng nhập là trang hiện tại, thì bạn có thể thay thế 'SignIn.xxx' bằng trang hiện tại để thực hiện 'làm mới'.
Bây giờ, bạn sẽ thấy rằng phương pháp cho Chrome 27 cũng hoạt động trong Firefox 21. Vì vậy, tốt hơn là sử dụng nó.
2. Khôi phục tên người dùng / mật khẩu đã lưu:
Nếu bạn đã có loginForm được mã hóa cứng dưới dạng HTML, thì bạn sẽ không gặp vấn đề gì khi khôi phục mật khẩu đã lưu trong loginForm.
Tuy nhiên, tên người dùng / mật khẩu đã lưu sẽ không được liên kết với loginForm nếu bạn sử dụng js / jquery để tạo loginForm một cách linh hoạt, vì tên người dùng / mật khẩu đã lưu chỉ được liên kết khi tải tài liệu.
Do đó, bạn cần mã hóa loginForm dưới dạng HTML và sử dụng js / jquery để di chuyển / hiển thị / ẩn động cơ đăng nhập.
Lưu ý:
Nếu bạn thực hiện đăng nhập ajax, đừng thêm autocomplete='off'
vào dạng thẻ như
<form id='loginForm' action='signedIn.xxx' autocomplete='off'>
autocomplete='off'
sẽ khiến việc khôi phục tên người dùng / mật khẩu vào loginForm không thành công vì bạn không cho phép nó 'tự động hoàn thành' tên người dùng / mật khẩu.