Come rilevare la pressione del tasto di escape con puro JS o jQuery?

Possibile duplicato:
Quale keycode per la chiave di escape con jQuery

Come rilevare la chiave di escape premere IE, Firefox e Chrome? Sotto il codice funziona in IE e avvisi 27 , ma in Firefox avvisa 0

 $('body').keypress(function(e){ alert(e.which); if(e.which == 27){ // Close my modal window } }); 

Sembra che funzioni keydown e keyup , anche se keypress no


 $(document).keyup(function(e) { if (e.keyCode == 27) { // escape key maps to keycode `27` //  } }); 

Quale keycode per la chiave di escape con jQuery

L’evento keydown funzionerà correttamente per Escape e ha il vantaggio di consentirti di utilizzare keyCode in tutti i browser. Inoltre, è necessario colbind l’ascoltatore al document piuttosto che al corpo.

AGGIORNAMENTO Maggio 2016

keyCode è ora in fase di deprecazione e la maggior parte dei browser moderni offre ora la proprietà key , anche se per il momento è ancora necessario un fallback per il supporto decente del browser (al momento della stesura delle versioni correnti di Chrome e Safari non supportarlo ).

 document.onkeydown = function(evt) { evt = evt || window.event; var isEscape = false; if ("key" in evt) { isEscape = (evt.key == "Escape" || evt.key == "Esc"); } else { isEscape = (evt.keyCode == 27); } if (isEscape) { alert("Escape"); } }; 
 Click me 

Usando JavaScript puoi controllare jsfiddle funzionante

 document.onkeydown = function(evt) { evt = evt || window.event; if (evt.keyCode == 27) { alert('Esc key pressed.'); } }; 

Usando jQuery puoi controllare jsfiddle funzionante

 jQuery(document).on('keyup',function(evt) { if (evt.keyCode == 27) { alert('Esc key pressed.'); } }); 

controlla per keyCode && which & keyup || keydown

 $(document).keydown(function(e){ var code = e.keyCode || e.which; alert(code); }); 

Il modo migliore è quello di rendere la funzione per questo

FUNZIONE:

 $.fn.escape = function (callback) { return this.each(function () { $(document).on("keydown", this, function (e) { var keycode = ((typeof e.keyCode !='undefined' && e.keyCode) ? e.keyCode : e.which); if (keycode === 27) { callback.call(this, e); }; }); }); }; 

ESEMPIO:

 $("#my-div").escape(function () { alert('Escape!'); }) 

Di seguito è riportato il codice che non solo disabilita il tasto ESC ma controlla anche la condizione in cui viene premuto e, a seconda della situazione, eseguirà l’azione o meno.

In questo esempio,

 e.preventDefault(); 

disabiliterà l’azione di pressione del tasto ESC.

Puoi fare qualcosa come hide un div con questo:

 document.getElementById('myDivId').style.display = 'none'; 

Dove viene anche preso in considerazione il tasto ESC:

 (e.target.nodeName=='BODY') 

È ansible rimuovere questo se parte condizione se ti piace applicare a questo a tutti. Oppure puoi selezionare INPUT come target per applicare questa azione solo quando il cursore si trova nella casella di input.

 window.addEventListener('keydown', function(e){ if((e.key=='Escape'||e.key=='Esc'||e.keyCode==27) && (e.target.nodeName=='BODY')){ e.preventDefault(); return false; } }, true); 

penso che il modo più semplice sia vanilla JavaScript:

 document.onkeyup = function(event) { if (event.key === 27){ //do something here } }