如何检测逃生按键与纯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 } });
尽pipe
keypress
可能不会,但似乎keydown
和keyup
工作
$(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
&& which
& keyup
|| 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);