Shi*_*ant 547 javascript jquery
我有两个功能.当按下enter时,功能正常运行,但是当按下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)
});
Run Code Online (Sandbox Code Playgroud)
CMS*_*CMS 909
尝试使用keyup事件:
$(document).keyup(function(e) {
if (e.keyCode === 13) $('.save').click(); // enter
if (e.keyCode === 27) $('.cancel').click(); // esc
});
Run Code Online (Sandbox Code Playgroud)
Set*_*son 74
不要硬编码函数中的键码值,而应考虑使用命名常量来更好地表达您的含义:
var KEYCODE_ENTER = 13;
var KEYCODE_ESC = 27;
$(document).keyup(function(e) {
if (e.keyCode == KEYCODE_ENTER) $('.save').click();
if (e.keyCode == KEYCODE_ESC) $('.cancel').click();
});
Run Code Online (Sandbox Code Playgroud)
某些浏览器(如FireFox,不确定其他浏览器)定义了一个全局KeyEvent
对象,为您公开这些类型的常量.这个SO问题也显示了在其他浏览器中定义该对象的好方法.
Jor*_*ugh 39
(从我以前的评论中提取的答案)
你需要使用keyup
而不是keypress
.例如:
$(document).keyup(function(e) {
if (e.which == 13) $('.save').click(); // enter
if (e.which == 27) $('.cancel').click(); // esc
});
Run Code Online (Sandbox Code Playgroud)
keypress
似乎没有在浏览器之间一致地处理(在IE浏览器和Chrome与Firefox 中的http://api.jquery.com/keypress上试用该演示.有时keypress
不注册,以及'哪个'和'的值keyCode'变化',但是keyup
是一致的.
由于有一些关于e.which
vs的讨论e.keyCode
:注意这e.which
是jquery-normalized值,并且是推荐使用的值:
event.which属性规范化event.keyCode和event.charCode.建议观看event.which键盘输入键.
(来自http://api.jquery.com/event.which/)
小智 25
要查找任何键的键码,请使用以下简单功能:
document.onkeydown = function(evt) {
console.log(evt.keyCode);
}
Run Code Online (Sandbox Code Playgroud)
Shi*_*hah 13
你最好的选择是
$(document).keyup(function(e) {
if (e.which === 13) $('.save').click(); // enter
if (e.which === 27) $('.cancel').click(); // esc
/* OPTIONAL: Only if you want other elements to ignore event */
e.preventDefault();
e.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)
摘要
which
比keyCode
归一化更优选keyup
比keydown
如果用户按下它可以多次出现keydown 更为可取.keypress
除非您想捕获实际字符,否则请勿使用.有趣的是,Bootstrap在其下拉组件中使用了keydown和keyCode(从3.0.2开始)!我认为这可能是糟糕的选择.
来自JQuery doc的相关代码片段
虽然浏览器使用不同的属性来存储此信息,但jQuery会规范化.which属性,以便您可以可靠地使用它来检索密钥代码.此代码对应于键盘上的键,包括特殊键(如箭头)的代码.为了捕获实际的文本输入,.keypress()可能是更好的选择.
其他感兴趣的项目:JavaScript Keypress Library
小智 9
$(document).escape(function() {
alert('ESC button pressed');
});
Run Code Online (Sandbox Code Playgroud)
或获取跨浏览器的密钥代码
var code = (e.keyCode ? e.keyCode : e.which);
if (code === 27) alert('ESC');
if (code === 13) alert('ENTER');
Run Code Online (Sandbox Code Playgroud)
也许你可以使用开关
var code = (e.keyCode ? e.keyCode : e.which);
switch (code) {
case 27:
alert('ESC');
break;
case 13:
alert('ENTER');
break;
}
Run Code Online (Sandbox Code Playgroud)
你的代码工作得很好.这很可能是没有集中注意力的窗口.我使用类似的功能关闭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';
}
});
Run Code Online (Sandbox Code Playgroud)
小智 7
我正在尝试做同样的事情而且它正在惹恼我.在firefox中,似乎如果你在按下转义键时尝试做一些事情,它会继续处理转义键,然后取消你想要做的任何事情.警报工作正常.但就我而言,我想回到历史上不起作用.终于想通了我必须强制事件的传播停止,如下所示......
if (keyCode == 27)
{
history.back();
if (window.event)
{
// IE works fine anyways so this isn't really needed
e.cancelBubble = true;
e.returnValue = false;
}
else if (e.stopPropagation)
{
// In firefox, this is what keeps the escape key from canceling the history.back()
e.stopPropagation();
e.preventDefault();
}
return (false);
}
Run Code Online (Sandbox Code Playgroud)
要获取所有字符的十六进制代码:http://asciitable.com/
解释其他答案没有的地方; 问题是你的使用keypress
.
也许这个事件只是错误的命名,但keypress
被定义为触发时.即文字.
而你想要的是/ ,无论何时(分别在之前或之后)都会发射.就是键盘上的那些东西.when an actual
character
is being inserted
keydown
keyup
the user depresses a
key
这里出现的差异esc
是因为它是一个控制字符(字面意思是'非打印字符'),因此不会写任何文本,因此甚至不会触发keypress
.
enter
很奇怪,因为即使你使用它作为控制字符(即控制UI),它仍然会插入一个新行字符,它将触发keypress
.
资料来源:quirksmode
一个强大的 Javascript 库,用于捕获键盘输入和输入的组合键。它没有依赖关系。
http://jaywcjlove.github.io/hotkeys/
hotkeys('enter,esc', function(event,handler){
switch(handler.key){
case "enter":$('.save').click();break;
case "esc":$('.cancel').click();break;
}
});
Run Code Online (Sandbox Code Playgroud)
热键了解以下修饰符:?,shiftoption?altctrlcontrolcommand,和?。
以下特殊键可用于快捷键:backspacetab,clear,enter,return,esc,escape,space,up,down,left,right,home,end,pageup,pagedown,del,delete和f1通过f19。
我知道这个问题是关于 jquery 的,但是对于那些使用 jqueryui 的人来说,许多键码都有常量:
$.ui.keyCode.ESCAPE
Run Code Online (Sandbox Code Playgroud)
http://api.jqueryui.com/jQuery.ui.keyCode/
仅发布更新的答案,而不是e.keyCode
在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);
Run Code Online (Sandbox Code Playgroud)