如何检测逃生按键与纯JS或jQuery?

可能重复:
哪个键码用于jQuery的转义键

IE,Firefox和Chrome如何检测退出键? 下面的代码工作在IE和警报27 ,但在Firefox中警报0

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

尽pipekeypress可能不会,但似乎keydownkeyup工作


 $(document).keyup(function(e) { if (e.keyCode == 27) { // escape key maps to keycode `27` // <DO YOUR WORK HERE> } }); 

哪个键码用于jQuery的转义键

keydown事件可以很好地运行Escape,并且可以让你在所有浏览器中使用keyCode 。 另外,您需要将侦听器附加到document而不是正文。

更新2016年5月

keyCode目前正处于被弃用的过程中,大多数现代浏览器现在都提供了key属性,尽pipe现在仍然需要一个可观的浏览器支持的回退(在编写当前版本的Chrome和Safari时不支持它)。

 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 

使用JavaScript,你可以检查工作jsfiddle

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

使用jQuery,你可以检查工作jsfiddle

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

检查keyCode && whichkeyup || keydown

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

最好的办法是为此做function

function:

 $.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); }; }); }); }; 

例:

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

我认为最简单的方法是香草javascript:

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

下面是不仅禁用ESC键,而且还检查按下的条件,根据情况,它会做或不做的代码。

在这个例子中,

 e.preventDefault(); 

将禁用ESC按键操作。

你可以做任何事情,像这样隐藏一个div:

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

按ESC键也被考虑在内:

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

如果条件部分适用于所有人,则可以将其删除。 或者,您可以在此inputINPUT,只在光标位于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);