我有一个javascript游戏的 idea (我将用EaselJS制作),我必须检测按键.在网上浏览之后,我看到了很多建议(使用window.onkeypress、使用jQuery等),但几乎每一个选项都有一个相反的论点.你们有什么建议?使用jQuery实现这一点听起来很简单,但我几乎没有使用该库的经验(而且我也不是javascript方面的老手),所以我宁愿避免使用它.如果jQuery是最好的 Select ,有人能给出一个很好的例子(解释会很棒)来说明如何做到这一点吗?

我猜这个问题问了很多,但我找不到任何明确的答案.提前谢谢!

推荐答案

对于纯Javascript,最简单的是:

document.onkeypress = function (e) {
    e = e || window.event;
    // use e.keyCode
};

But with this, you can only bind one handler for the event.

此外,您还可以使用以下内容将多个处理程序潜在地绑定到同一事件:

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库内部执行的所有操作,否则要知道这一点就有点困难.

Note there is a keydown event, that is different than keypress. You can learn more about them here: onKeyPress Vs. onKeyUp and onKeyDown

As for suggesting what to use, I would definitely suggest using jQuery if you're up for learning the framework. At the same time, I would say that you should learn Javascript's syntax, methods, features, and how to interact with the DOM. Once you understand how it works and what's happening, you should be more comfortable working with jQuery. To me, jQuery makes things more consistent and is more concise. In the end, it's Javascript, and wraps the language.

jQuery非常有用的另一个例子是AJAX.浏览器与AJAX请求的处理方式不一致,因此jQuery会对其进行抽象,因此您不必担心.

这里有一些东西可能会帮助你做出决定:

Jquery相关问答推荐

可以推迟 jQuery 的加载吗?

未捕获的类型错误:无法读取未定义的属性toLowerCase

如何使用 jQuery Select 所有复选框?

数据表警告(表 id = 'example'):无法重新初始化数据表

jQuery 中 prop() 和 attr() 的区别以及何时使用 attr() 和 prop()

Select select2后触发动作

JavaScript / jQuery:测试窗口是否有焦点

jQuery - 用 DIV 跟随光标

将每 3 个 div 包装在一个 div 中

停止输入/书写后如何触发输入文本中的事件?

如果不是 jQuery,Javascript 中的美元符号是什么

判断复选框是否未选中单击 - jQuery

如何在 JQuery 中 Select 除单击元素之外的所有类?

jQuery确定匹配的类是否具有给定的ID

jQuery attr 与props ?

jQuery.active 函数

HTMLCollection、NodeLists 和对象数组之间的区别

.success() 和 .complete() 之间的区别?

textarea 的 val() 与 text()

IE 中带有 jQ​​uery ajax 调用的无传输错误