使用纯JavaScript,最简单的方法是:
document.onkeypress = function (e) {
e = e || window.event;
// use e.keyCode
};
但是这样只能为事件绑定一个处理程序。
此外,您可以使用以下方法来潜在地将多个处理程序绑定到同一事件:
addEvent(document, "keypress", function (e) {
e = e || window.event;
// use e.keyCode
});
function addEvent(element, eventName, callback) {
if (element.addEventListener) {
element.addEventListener(eventName, callback, false);
} else if (element.attachEvent) {
element.attachEvent("on" + eventName, callback);
} else {
element["on" + eventName] = callback;
}
}
无论哪种情况,keyCode
在不同的浏览器中表现不一致,因此还需要进行更多的检查和解决。请注意 e = e || window.event
- 这是Internet Explorer的一个普遍问题,在这种情况下,它将事件放在window.event
而不是将其传递给回调函数。
参考资料:
使用jQuery:
$(document).on("keypress", function (e) {
// use e.which
});
参考资料:
除了 jQuery 是一个 "大型" 库之外,jQuery 在处理浏览器之间的差异方面确实非常有帮助,特别是在处理窗口事件方面...这是无法否认的。希望明显的是,我为您提供的 jQuery 代码更加优雅和简短,但仍以一致的方式完成了您想要的功能。您应该能够相信 e
(事件) 和 e.which
(键码,用于知道按下了哪个键) 是准确的。在普通的 JavaScript 中,要知道这一点有点困难,除非您做 jQuery 库内部所做的一切。
请注意,有一个keydown
事件,与keypress
不同。您可以在这里了解更多信息:onKeyPress Vs. onKeyUp and onKeyDown
至于建议使用什么,我肯定会建议您学习这个框架并使用 jQuery。同时,我会说您应该学习 JavaScript 的语法、方法、功能以及如何与 DOM 进行交互。一旦您理解了它是如何工作的以及发生了什么,您应该更加舒适地使用 jQuery。对我来说,jQuery 使事情更加一致并更加简洁。最终,它是 JavaScript,并包装了这门语言。
jQuery 非常有用的另一个例子是 AJAX。浏览器在处理 AJAX 请求时不一致,因此 jQuery 将其抽象化,以便您无需担心。
以下是可能有所帮助的内容:
attachEvent()
(顺便说一下,这不是我的投票)。 - David Thomaskeypress
没有起作用,所以我不得不使用 keydown
。 - William Jones按键事件(回车键)
点击代码片段内部并按下回车键。
纯 JavaScript
document.addEventListener("keypress", function(event) {
if (event.keyCode == 13) {
alert('hi.');
}
});
香草简写(箭头函数,ES6)
this.addEventListener('keypress', event => {
if (event.keyCode == 13) {
alert('hi.')
}
})
jQuery
$(this).on('keypress', function(event) {
if (event.keyCode == 13) {
alert('hi.')
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
jQuery经典版
$(this).keypress(function(event) {
if (event.keyCode == 13) {
alert('hi.')
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
jQuery简写(箭头函数,ES6)
$(this).keypress((e) => {
if (e.keyCode == 13)
alert('hi.')
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
更短的代码(ES6,ECMAScript 2021)
$(this).keypress(e=>
e.which==13&&alert`☺`
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
this
将焦点放在结果内部的窗口范围内,出于简洁起见,但这并不是必要的。
已废弃:.which
和.keyCode
方法实际上已经被视为废弃,因此我建议使用.code
,但我个人仍然使用keyCode,因为性能更快,这对我来说很重要。
jQuery经典版本的.keypress()
并非官方废弃,但一些人认为它们不再被推荐使用,而.on('keypress')
具有更多功能(动态状态、多个处理程序等)。
在Vanilla版本中,'keypress'
事件也已经过时。人们应该优先考虑beforeinput或keydown,以及今天的keyup
。
性能:
越快越好。这就是为什么我更喜欢 .keyCode
,即使它在大多数情况下被认为是过时的。不过这完全取决于你(已提交于2020年)。
document.addEventListener("keypress", function(event)
:好的,但为什么我不能“捕获”[Esc]键? - Apostoloskeypress
来处理ASCII字符(D,L,%,1,Ä等),并使用keydown
来处理非字符键(箭头键,Esc,Alt,Ctrl,Page up / down等)。随着时间的推移,事物可能会发生改变... - Thieliciousevent.key
和现代JS!不再需要数字代码。你可以直接使用"Enter"
、"ArrowLeft"
、"r"
或任何键名,使你的代码更易读。
注意:旧的替代方案(
.keyCode
和.which
)已过时。
document.addEventListener("keypress", function onEvent(event) {
if (event.key === "ArrowLeft") {
// Move Left
}
else if (event.key === "Enter") {
// Open Menu...
}
});
不要过于复杂化。
document.addEventListener('keydown', logKey);
function logKey(e) {
if (`${e.code}` == "ArrowRight") {
//code here
}
if (`${e.code}` == "ArrowLeft") {
//code here
}
if (`${e.code}` == "ArrowDown") {
//code here
}
if (`${e.code}` == "ArrowUp") {
//code here
}
}
document.removeEventListener()
,但它不起作用:监听器仍然处于活动状态,即键盘仍然在被监视! - Apostolosevent.repeat = false
以防止这种情况的发生。 - Thielicious有几种方法可以处理这个问题;纯JavaScript可以很好地解决:
function code(e) {
e = e || window.event;
return(e.keyCode || e.which);
}
window.onload = function(){
document.onkeypress = function(e){
var key = code(e);
// do something with key
};
};
或者更加有条理地处理它:
(function(d){
var modern = (d.addEventListener), event = function(obj, evt, fn){
if(modern) {
obj.addEventListener(evt, fn, false);
} else {
obj.attachEvent("on" + evt, fn);
}
}, code = function(e){
e = e || window.event;
return(e.keyCode || e.which);
}, init = function(){
event(d, "keypress", function(e){
var key = code(e);
// do stuff with key here
});
};
if(modern) {
d.addEventListener("DOMContentLoaded", init, false);
} else {
d.attachEvent("onreadystatechange", function(){
if(d.readyState === "complete") {
init();
}
});
}
})(document);
在编程中,捕获按键事件非常稳定。我以前在多个场合使用过这段代码,并取得了积极的结果。
此链接将显示您按下键时的键码。 查找键码
$("#your_input_id").keydown(function(event) {
if(event.keyCode == 189) {
alert('Dexter');
}
});