คำตอบส่วนใหญ่ที่นี่เน้นทฤษฎีมากกว่าเรื่องเชิงปฏิบัติและมีความแตกต่างระหว่าง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เกิดเพลิงไหม้