ฉันต้องการที่จะเพิ่ม "ปลาย" คำตอบเพราะผมต่อสู้กับchange
, keyup
และsearch
ในวันนี้และบางทีสิ่งที่ผมพบในท้ายที่สุดอาจจะเป็นประโยชน์สำหรับคนอื่น ๆ มากเกินไป โดยทั่วไปฉันมีแผงค้นหาตามประเภทและฉันเพียงต้องการตอบสนองอย่างถูกต้องต่อการกด X เล็กน้อย (ภายใต้ Chrome และ Opera, FF ไม่ได้ใช้งาน) และล้างบานหน้าต่างเนื้อหาเป็นผลลัพธ์
ฉันมีรหัสนี้:
$(some-input).keyup(function() {
// update panel
}
$(some-input).change(function() {
// update panel
}
$(some-input).on("search", function() {
// update panel
}
(แยกจากกันเพราะฉันต้องการตรวจสอบเวลาและสถานการณ์ที่เรียกแต่ละครั้ง)
ปรากฎว่า Chrome และ Firefox ตอบสนองแตกต่างกัน โดยเฉพาะอย่างยิ่ง Firefox ถือว่าchange
เป็น "ทุกการเปลี่ยนแปลงการป้อนข้อมูล" ในขณะที่ Chrome ถือว่าเป็น "เมื่อการสูญเสียโฟกัสและเนื้อหาที่มีการเปลี่ยนแปลง" ดังนั้นใน Chrome จึงมีการเรียกใช้ฟังก์ชัน "แผงการอัปเดต" หนึ่งครั้งบน FF สองครั้งสำหรับทุกการกดแป้นพิมพ์ (หนึ่งในkeyup
หนึ่งในหนึ่งchange
)
นอกจากนี้การล้างข้อมูลที่มีขนาดเล็ก X (ซึ่งไม่อยู่ภายใต้ FF) ยิงsearch
เหตุการณ์ภายใต้ Chrome: ไม่มีไม่มีkeyup
change
สรุปหรือไม่ ใช้input
แทน:
$(some-input).on("input", function() {
// update panel
}
มันทำงานได้กับพฤติกรรมแบบเดียวกันภายใต้เบราว์เซอร์ทั้งหมดที่ฉันทดสอบตอบสนองทุกการเปลี่ยนแปลงในเนื้อหาอินพุต (คัดลอกวางด้วยเมาส์เติมข้อความอัตโนมัติและรวม "X")
onchange
เหตุการณ์ใช่ไหม