无法理解Firefox键码参考

时间:2013-01-18 06:54:55

标签: javascript firefox keycode

我正在尝试使用initKeyEvent模拟一些键盘键码( Alt + W ):

evt = document.createEvent("KeyboardEvent");
evt.initKeyEvent("keypress",true,true,window,0,true,0,0,?,?);
body.dispatchEvent(evt);

问题是我无法找到w的虚拟键码值和Unicode字符。 Firefox密钥事件记录在案here但我无法理解它。

initKeyEvent已指定为here

2 个答案:

答案 0 :(得分:4)

确实有点复杂,主要是出于历史原因。根据您是查看keypress还是keydown / keyup事件,情况会有所不同。 keypress事件尽可能使用字符代码。这意味着对于可打印字符(您可以在文本字段中使用的字符),charCode参数应在keyCode参数为0时设置。charCode参数实际上是ASCII代码该字符,意味着在你的情况下(字母w)你会这样做:

evt.initKeyEvent("keypress", true, true, window, 0, true, 0, 0, 0, "w".charCodeAt(0));

对于不可打印的字符或另一方面使用keydown / keyup事件时,您应设置keyCode参数并将0传递为charCode。此参数引用virtual key codes。您在此处使用的关键代码是DOM_VK_W

evt.initKeyEvent("keydown", true, true, window, 0, true, 0, 0, evt.DOM_VK_W, 0);

常量DOM_VK_W仅在Firefox中定义,但为了与其他浏览器兼容,您应该使用其数值:

evt.initKeyEvent("keydown", true, true, window, 0, true, 0, 0, 87, 0);

虚拟键码与许多字符的ASCII码相同,但它们不是一回事。特别是,虚拟键代码指的是键盘上按下的实际按钮,因此它们不区分小写字母和大写字母 - 这与 Ctrl W等键组合无关。 keydown处理。另一方面,文本字段(处理keypress)非常关心这种差异 - 这里使用的ASCII代码表示要添加的实际字符。

请注意,这种方法(区分键盘上按下按钮的事件和这些按钮产生的实际字符)和实际虚拟键码都是从Windows“借用”的。

答案 1 :(得分:0)

查看您引用的页面可以使用第二个文档中定义的虚拟键代码:

94   const unsigned long DOM_VK_W              = 0x57;

将提供代码

evt.initKeyEvent("keypress", true, true, window, 0, true, 0, 0, 87, 0);

或者您可以传递字符代码(最后一个参数),它是相同的值:

evt.initKeyEvent("keypress", true, true, window, 0, true, 0, 0, 0, 87);

注意:我无法对此进行测试,而且直接基于文档。