一尘不染

检测javascript中按键的最简单方法

javascript

我有一个使用javascript进行游戏的想法(我将使用EaselJS进行开发),我将不得不检测按键。在互联网上四处浏览后,我看到了很多建议(使用window.onkeypress,使用jQuery等),但是几乎每个选项都有一个反对意见。你们有什么建议?使用jQuery听起来很容易,但实际上我没有使用该库的经验(而且我也不是JavaScript的资深人士),所以我宁愿避免使用它。如果jQuery是最好的选择,那么有人可以举一个很好的例子(说明会很棒)吗?

我猜这被问了很多,但是我找不到任何明确的答案。提前致谢!


阅读 226

收藏
2020-05-01

共1个答案

一尘不染

使用纯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库内部执行的所有操作。

至于建议使用什么,如果您愿意学习框架,我肯定会建议使用jQuery。同时,我想说的是您应该学习Javascript的语法,方法,功能以及如何与DOM交互。一旦了解了它的工作原理和正在发生的事情,就应该更轻松地使用jQuery。对我来说,jQuery使事情更一致,更简洁。最后,它是Java语言,并包装了语言。

jQuery非常有用的另一个示例是AJAX。浏览器与AJAX请求的处理方式不一致,因此jQuery可以抽象出来,因此您不必担心。

2020-05-01