我需要每次按下一个键时,都会执行一个函数,该函数会因按下的键而异。所以我需要知道按下了哪个键。
这是我到目前为止所拥有的:
function onKeyDownHandler() {
console.log("key pressed ", String.fromCharCode(event.keyCode));
}
<input onkeydown="onKeyDownHandler();"/>
但我仍然无法获得按下的键的值。
我需要每次按下一个键时,都会执行一个函数,该函数会因按下的键而异。所以我需要知道按下了哪个键。
这是我到目前为止所拥有的:
function onKeyDownHandler() {
console.log("key pressed ", String.fromCharCode(event.keyCode));
}
<input onkeydown="onKeyDownHandler();"/>
但我仍然无法获得按下的键的值。
您可以执行以下操作:
我们要做的第一件事是
event
在 event中包含变量OnKeyDown
。这样做是为了在执行事件时,它可以访问有关密钥的信息。第二种是使用这条指令:
这使我们可以获取按下的键的代码。我们使用
which
该参数是因为该参数keyCode
可能不适用于所有浏览器。如果您想了解其他键(Escape、Enter、Shift 等),可以查看此页面,此处包含键代码示例。
关于使用说明
which
,keyCode
你可以看看这个链接,其中说明了原因。event.key
更容易Mozilla 文档
如果您使用的是纯 javascript(没有 jquery),则必须先进行一些验证。
您的输入必须采用事件参数,因为在 FireFox 中,事件不是全局的,而是作为参数传递的
在您的函数中,您必须首先验证事件来自哪里,它是在参数中(FireFox)还是在全局范围内(IE)。然后你必须用keyCode(IE和FF)或wich(我认为是Netscape和Opera)来获取按下的键的值。
请注意,key的值将是所按下键的 ASCII 码。
简短的回答
不要使用全局属性,而是将其声明
event
为函数的参数。而不是分别
keyCode
用于key
字符键、,shiftKey
和shiftctrlKey
、control、alt 和 Windows / Command (Mac) 键。altKey
metaKey
解释
在 Firefox for Windows 中,问题中的代码不起作用,它返回
发生这种情况是因为在 Internet Explorer 和 Chrome 中
event
它是全局属性,但在 Firefox 中不是。另一方面,根据https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent,这两个属性都已弃用
keyCode
,并且which
使用key
. 、shiftKey
和属性将返回是否已按下相应的键ctrlKey
。altKey
metaKey
true
除了被弃用之外,并非所有浏览器都支持此类属性。
另一种选择是使用诸如 jQuery 之类的库,该库旨在处理不同浏览器的变体。
使用“纯”JavaScript 的示例
以下示例将击键日志添加到元素
<input>
并将结果打印到元素<div>
。说“纯”是因为 KeyboardEvent 对象不是 JavaScript 语言规范的对象,而是 Web API 的一部分。
使用 jQuery 的示例
jQuery 的目的之一是以标准化的方式支持多种浏览器。下面是一个示例,其中应用了简短回答部分中提到的建议,事件对象将被分配到的变量的声明以及属性的使用
key
。