คำตอบส่วนใหญ่ที่นี่เน้นทฤษฎีมากกว่าเรื่องเชิงปฏิบัติและมีความแตกต่างระหว่างkeyup
และkeypress
เกี่ยวข้องกับค่าของฟิลด์อินพุตอย่างน้อยใน Firefox (ทดสอบใน 43)
หากผู้ใช้พิมพ์1
ลงในองค์ประกอบการป้อนข้อมูลที่ว่างเปล่า:
ค่าขององค์ประกอบอินพุตจะเป็นสตริงว่าง (ค่าเก่า) ภายในkeypress
ตัวจัดการ
ค่าขององค์ประกอบอินพุตจะเป็น1
(ค่าใหม่) ภายในkeyup
ตัวจัดการ
สิ่งนี้มีความสำคัญอย่างยิ่งหากคุณกำลังทำบางสิ่งที่ต้องอาศัยการรับรู้คุณค่าใหม่หลังจากอินพุตแทนที่จะเป็นค่าปัจจุบันเช่นการตรวจสอบความถูกต้องแบบอินไลน์หรือการแท็บอัตโนมัติ
สถานการณ์:
- ผู้ใช้พิมพ์
12345
ลงในองค์ประกอบการป้อนข้อมูล
12345
ผู้ใช้เลือกข้อความ
A
ประเภทผู้ใช้ตัวอักษร
เมื่อkeypress
เหตุการณ์ fires หลังจากป้อนตัวอักษรA
, A
กล่องข้อความในขณะนี้มีเพียงตัวอักษร
แต่:
- Field.val ()
12345
เป็น
- $ Field.val (). ความยาวคือ
5
- การเลือกผู้ใช้เป็นสตริงว่าง (ป้องกันไม่ให้คุณพิจารณาสิ่งที่ถูกลบโดยการเขียนทับการเลือก)
ดังนั้นจึงดูเหมือนว่าเบราว์เซอร์ (Firefox 43) ลบตัวเลือกของผู้ใช้แล้วไฟkeypress
เหตุการณ์แล้วปรับปรุงเนื้อหาฟิลด์แล้วkeyup
เกิดเพลิงไหม้