Saya menemukan solusi lengkap untuk pertanyaan ini. (Saya sudah menguji ini di Chrome 27 dan Firefox 21).
Ada dua hal yang perlu diketahui:
- Memicu 'Simpan kata sandi', dan
- Kembalikan nama pengguna / kata sandi yang disimpan
1. Pemicu 'Simpan kata sandi':
Untuk Firefox 21 , 'Simpan kata sandi' dipicu ketika mendeteksi bahwa ada formulir yang berisi bidang teks input dan bidang kata sandi input dikirimkan. Jadi kita hanya perlu menggunakan
$('#loginButton').click(someFunctionForLogin);
$('#loginForm').submit(function(event){event.preventDefault();});
someFunctionForLogin()
melakukan login ajax dan memuat ulang / mengarahkan ke halaman yang sudah masuk sambil event.preventDefault()
memblokir pengalihan asli karena mengirimkan formulir.
Jika Anda hanya berurusan dengan Firefox, solusi di atas sudah cukup tetapi tidak bekerja di Chrome 27. Kemudian Anda akan bertanya bagaimana memicu 'Simpan kata sandi' di Chrome 27.
Untuk Chrome 27 , 'Simpan kata sandi' dipicu setelah diarahkan ke halaman dengan mengirimkan formulir yang berisi bidang teks input dengan nama atribut = 'nama pengguna' dan bidang kata sandi input dengan nama atribut = 'kata sandi' . Karena itu, kami tidak dapat memblokir pengalihan karena mengirimkan formulir tetapi kami dapat melakukan pengalihan setelah kami melakukan login ajax. (Jika Anda ingin login ajax tidak memuat ulang halaman atau tidak mengalihkan ke halaman, sayangnya, solusi saya tidak berfungsi.) Kemudian, kita dapat menggunakan
<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>
Tombol dengan tipe = 'tombol' akan membuat formulir tidak dikirimkan ketika tombol diklik. Kemudian, mengikat fungsi ke tombol untuk login ajax. Akhirnya, memanggil $('#loginForm').submit();
pengalihan ke halaman yang masuk. Jika halaman yang masuk adalah halaman saat ini, maka Anda dapat mengganti 'signedIn.xxx' dengan halaman saat ini untuk membuat 'refresh'.
Sekarang, Anda akan menemukan bahwa metode untuk Chrome 27 juga berfungsi di Firefox 21. Jadi, lebih baik menggunakannya.
2. Kembalikan nama pengguna / kata sandi yang disimpan:
Jika Anda sudah memiliki loginForm hard-coded sebagai HTML, maka Anda tidak akan menemukan masalah untuk mengembalikan kata sandi yang disimpan di loginForm.
Namun, nama pengguna / kata sandi yang disimpan tidak akan diikat ke loginForm jika Anda menggunakan js / jquery untuk membuat loginForm secara dinamis, karena nama pengguna / kata sandi yang disimpan hanya diikat ketika dokumen dimuat.
Oleh karena itu, Anda perlu membuat hard-code loginForm sebagai HTML dan menggunakan js / jquery untuk memindahkan / menampilkan / menyembunyikan loginForm secara dinamis.
Catatan:
Jika Anda melakukan login ajax, jangan tambahkan autocomplete='off'
dalam bentuk tag seperti
<form id='loginForm' action='signedIn.xxx' autocomplete='off'>
autocomplete='off'
akan membuat mengembalikan nama pengguna / kata sandi ke dalam loginForm gagal karena Anda tidak memperbolehkannya 'melengkapi secara otomatis' nama pengguna / kata sandi.