การจับ“ Delete” Keypress ด้วย jQuery


118

เมื่อใช้โค้ดตัวอย่างจากเอกสาร jQuery สำหรับตัวจัดการเหตุการณ์การกดแป้นฉันไม่สามารถจับDeleteคีย์ได้ ตัวอย่างด้านล่างจะเข้าสู่ระบบ0เมื่อDeleteกดปุ่มใน FireFox:

$(document).keypress(function(e) {
    console.log(e.which);       
});

ดูเหมือนว่าจะต้องมีวิธีจับDeleteกุญแจ แต่เป็นคำที่คลุมเครือดังนั้น Google จึงไม่ได้พิสูจน์ว่าช่วยได้มากนัก

คำตอบ:


202

คุณไม่ควรใช้keypressเหตุการณ์ แต่keyupหรือkeydownเหตุการณ์เนื่องจากkeypressเหตุการณ์มีไว้สำหรับอักขระจริง (พิมพ์ได้) keydownจะถูกจัดการในระดับที่ต่ำจึงจะจับคีย์ไม่พิมพ์ออกมาทุกคนชอบและdeleteenter


keyupจะทำงานได้ดีขึ้น
localhoost

2
@atilkan ไม่มีผู้ใช้คาดหวังความคิดเห็นเกี่ยวกับไม่keydown keyupโปรแกรมแก้ไขข้อความทั้งหมดจะดำเนินการเมื่อกดแป้นไม่ใช่เมื่อปล่อย
Philippe Leybaert

1
@PhilippeLeybaert ในโปรแกรมเคสของฉันไม่สามารถจับถ่านที่กดล่าสุดได้
localhoost

82
$('html').keyup(function(e){
    if(e.keyCode == 46) {
        alert('Delete key released');
    }
});

ที่มา: รหัสคีย์ javascript ถ่านจาก www.cambiaresearch.com


18
alert('Delete Key Released')มันควรจะเป็น
Waldheinz

หากมีคนใช้การกดแป้นแทนการกดแป้นที่ Tod แนะนำคุณจะได้รับรหัส == 46 เหตุการณ์ คีย์ (จุด) แต่ใช้งานได้ดีกับ keyUp ขอบคุณ
Mubashar

34

รหัสจาวาสคริปต์

  • e.keyCode == 8 สำหรับbackspace
  • e.keyCode == 46 สำหรับforward backspaceหรือdeleteปุ่มในเครื่องพีซี

ยกเว้นรายละเอียดนี้คำตอบของ Colin & Tod ใช้งานได้


4
ควรเป็นe.keyCodeไม่ใช่ e.KeyCode
เจอโรม

16

event.key === "ลบ"

อื่น ๆ event.keyที่ผ่านมาและทำความสะอาดมากใช้งาน: ใช้ ไม่มีรหัสตัวเลขตามอำเภอใจอีกต่อไป!

หมายเหตุ: คุณสมบัติเก่า ( .keyCodeและ.which) เลิกใช้งาน

document.addEventListener('keydown', function(event) {
    const key = event.key; // const {key} = event; ES6+
    if (key === "Delete") {
        // Do things
    }
});

Mozilla Docs

เบราว์เซอร์ที่รองรับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.