ฉันพบคำตอบที่สมบูรณ์สำหรับคำถามนี้ (ฉันได้ทำการทดสอบใน Chrome 27 และ Firefox 21)
มีสองสิ่งที่ควรทราบ:
- ทริกเกอร์ 'บันทึกรหัสผ่าน' และ
- กู้คืนชื่อผู้ใช้ / รหัสผ่านที่บันทึกไว้
1. ทริกเกอร์ 'บันทึกรหัสผ่าน':
สำหรับFirefox 21ระบบจะเรียกใช้ 'บันทึกรหัสผ่าน' เมื่อตรวจพบว่ามีรูปแบบที่ประกอบด้วยช่องป้อนข้อความและมีการส่งฟิลด์ป้อนรหัสผ่าน ดังนั้นเราต้องใช้
$('#loginButton').click(someFunctionForLogin);
$('#loginForm').submit(function(event){event.preventDefault();});
someFunctionForLogin()
ajax ทำการล็อกอินและโหลดใหม่ / เปลี่ยนเส้นทางไปยังหน้าลงชื่อเข้าใช้ในขณะที่ event.preventDefault()
บล็อกการเปลี่ยนเส้นทางดั้งเดิมเนื่องจากการส่งแบบฟอร์ม
หากคุณจัดการกับ Firefox เท่านั้นโซลูชันดังกล่าวเพียงพอ แต่ไม่สามารถใช้งานได้ใน Chrome 27 จากนั้นคุณจะถามวิธีการ 'บันทึกรหัสผ่าน' ใน Chrome 27
สำหรับChrome 27 , 'บันทึกรหัสผ่าน' ถูกเรียกหลังจากที่มันถูกเปลี่ยนเส้นทางไปยังหน้าเว็บโดยกรอกแบบฟอร์มที่มีข้อมูลป้อนข้อความที่มีชื่อแอตทริบิวต์ = 'ชื่อผู้ใช้'และเขตใส่รหัสผ่านที่มีชื่อแอตทริบิวต์ = 'รหัสผ่าน' ดังนั้นเราไม่สามารถปิดกั้นการเปลี่ยนเส้นทางเนื่องจากการส่งแบบฟอร์ม แต่เราสามารถทำการเปลี่ยนเส้นทางได้หลังจากที่เราได้ทำการเข้าสู่ระบบ ajax (หากคุณต้องการให้ ajax login ไม่โหลดหน้าเว็บซ้ำหรือไม่เปลี่ยนเส้นทางไปยังหน้าเว็บโชคไม่ดีที่โซลูชันของฉันใช้งานไม่ได้)จากนั้นเราสามารถใช้
<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>
ปุ่มที่มี type = 'button' จะทำให้ไม่ต้องส่งแบบฟอร์มเมื่อคลิกปุ่ม จากนั้นผูกฟังก์ชั่นกับปุ่มเพื่อเข้าสู่ระบบ Ajax ในที่สุดการโทร$('#loginForm').submit();
เปลี่ยนเส้นทางไปยังหน้าลงชื่อเข้าใช้ หากหน้าลงชื่อเข้าใช้เป็นหน้าปัจจุบันคุณสามารถแทนที่ 'เซ็นต์อิน. xxx' ด้วยหน้าปัจจุบันเพื่อให้ 'รีเฟรช'
ตอนนี้คุณจะพบว่าวิธีการสำหรับ Chrome 27 นั้นใช้ได้ใน Firefox 21 ด้วยดังนั้นจึงเป็นการดีกว่าที่จะใช้
2. กู้คืนชื่อผู้ใช้ / รหัสผ่านที่บันทึกไว้:
หากคุณมีรหัสการเข้าสู่ระบบแบบ HTML เป็นแล้วคุณจะไม่พบปัญหาในการกู้คืนรหัสผ่านที่บันทึกไว้ใน loginForm
อย่างไรก็ตามชื่อผู้ใช้ / รหัสผ่านที่บันทึกไว้จะไม่ถูกผูกไว้กับ loginForm ถ้าคุณใช้ js / jquery เพื่อให้ loginForm แบบไดนามิกเพราะชื่อผู้ใช้ / รหัสผ่านที่บันทึกไว้จะถูกผูกเมื่อเอกสารโหลดเท่านั้น
ดังนั้นคุณจำเป็นต้องรหัสหนัก ๆ ของ loginForm เป็น HTML และใช้ js / jquery เพื่อย้าย / แสดง / ซ่อน loginForm แบบไดนามิก
หมายเหตุ:
หากคุณเข้าสู่ระบบ ajax อย่าเพิ่มautocomplete='off'
ในรูปแบบแท็กเช่น
<form id='loginForm' action='signedIn.xxx' autocomplete='off'>
autocomplete='off'
จะทำให้ชื่อผู้ใช้ / รหัสผ่านการเรียกคืนสู่ loginForm ล้มเหลวเนื่องจากคุณไม่อนุญาตให้ใช้ชื่อผู้ใช้ / รหัสผ่านโดยอัตโนมัติ