我有两个函数。当按下回车键时,函数正常运行,但当按下escape键时,它就不正常了。退出键的正确数字是多少?
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // enter (works as expected)
if (e.which == 27) $('.cancel').click(); // esc (does not work)
});
我有两个函数。当按下回车键时,函数正常运行,但当按下escape键时,它就不正常了。退出键的正确数字是多少?
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // enter (works as expected)
if (e.which == 27) $('.cancel').click(); // esc (does not work)
});
当前回答
(答案摘自我之前的评论)
你需要使用keyup而不是keypress。例如:
$(document).keyup(function(e) {
if (e.which == 13) $('.save').click(); // enter
if (e.which == 27) $('.cancel').click(); // esc
});
键盘按键在不同浏览器之间的处理似乎不一致(请在http://api.jquery.com/keypress上尝试IE vs Chrome vs Firefox的演示。有时按键不注册,'which'和'keyCode'的值都不同),而keyup是一致的。
由于有一些关于e.which和e.keyCode的讨论:请注意,e.which是jquery规范化的值,是推荐使用的值:
该事件。哪个属性规范化事件。keyCode和event.charCode。建议观看赛事。其中用于键盘按键输入。
(来自http://api.jquery.com/event.which/)
其他回答
只是发布一个更新的答案比e.c ekeycode被认为是DEPRECATED在MDN上。
相反,你应该选择e.key,它支持所有东西的干净名称。下面是相关的抄面食
window.addEventListener("keydown", function (event) {
if (event.defaultPrevented) {
return; // Do nothing if the event was already processed
}
switch (event.key) {
case "ArrowDown":
// Do something for "down arrow" key press.
break;
case "ArrowUp":
// Do something for "up arrow" key press.
break;
case "ArrowLeft":
// Do something for "left arrow" key press.
break;
case "ArrowRight":
// Do something for "right arrow" key press.
break;
case "Enter":
// Do something for "enter" or "return" key press.
break;
case "Escape":
// Do something for "esc" key press.
break;
default:
return; // Quit when this doesn't handle the key event.
}
// Cancel the default action to avoid it being handled twice
event.preventDefault();
}, true);
您的代码工作得很好。很可能是窗户没有聚焦。我使用类似的功能关闭iframe框等。
$(document).ready(function(){
// Set focus
setTimeout('window.focus()',1000);
});
$(document).keypress(function(e) {
// Enable esc
if (e.keyCode == 27) {
parent.document.getElementById('iframediv').style.display='none';
parent.document.getElementById('iframe').src='/views/view.empty.black.html';
}
});
(答案摘自我之前的评论)
你需要使用keyup而不是keypress。例如:
$(document).keyup(function(e) {
if (e.which == 13) $('.save').click(); // enter
if (e.which == 27) $('.cancel').click(); // esc
});
键盘按键在不同浏览器之间的处理似乎不一致(请在http://api.jquery.com/keypress上尝试IE vs Chrome vs Firefox的演示。有时按键不注册,'which'和'keyCode'的值都不同),而keyup是一致的。
由于有一些关于e.which和e.keyCode的讨论:请注意,e.which是jquery规范化的值,是推荐使用的值:
该事件。哪个属性规范化事件。keyCode和event.charCode。建议观看赛事。其中用于键盘按键输入。
(来自http://api.jquery.com/event.which/)
27是escape键的代码。:)
尝试使用keyup事件:
$(document).on('keyup', function(e) {
if (e.key == "Enter") $('.save').click();
if (e.key == "Escape") $('.cancel').click();
});