aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/keyboardevent
diff options
context:
space:
mode:
Diffstat (limited to 'files/zh-cn/web/api/keyboardevent')
-rw-r--r--files/zh-cn/web/api/keyboardevent/altkey/index.html126
-rw-r--r--files/zh-cn/web/api/keyboardevent/charcode/index.html144
-rw-r--r--files/zh-cn/web/api/keyboardevent/code/index.html3816
-rw-r--r--files/zh-cn/web/api/keyboardevent/ctrlkey/index.html126
-rw-r--r--files/zh-cn/web/api/keyboardevent/index.html330
-rw-r--r--files/zh-cn/web/api/keyboardevent/initkeyevent/index.html85
-rw-r--r--files/zh-cn/web/api/keyboardevent/iscomposing/index.html102
-rw-r--r--files/zh-cn/web/api/keyboardevent/key/index.html292
-rw-r--r--files/zh-cn/web/api/keyboardevent/key/key_values/index.html3638
-rw-r--r--files/zh-cn/web/api/keyboardevent/keyboardevent/index.html151
-rw-r--r--files/zh-cn/web/api/keyboardevent/keycode/index.html3220
-rw-r--r--files/zh-cn/web/api/keyboardevent/location/index.html104
-rw-r--r--files/zh-cn/web/api/keyboardevent/metakey/index.html66
-rw-r--r--files/zh-cn/web/api/keyboardevent/repeat/index.html85
-rw-r--r--files/zh-cn/web/api/keyboardevent/shiftkey/index.html128
-rw-r--r--files/zh-cn/web/api/keyboardevent/which/index.html101
16 files changed, 12514 insertions, 0 deletions
diff --git a/files/zh-cn/web/api/keyboardevent/altkey/index.html b/files/zh-cn/web/api/keyboardevent/altkey/index.html
new file mode 100644
index 0000000000..0987f3ea89
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/altkey/index.html
@@ -0,0 +1,126 @@
+---
+title: KeyboardEvent.altKey
+slug: Web/API/KeyboardEvent/altKey
+tags:
+ - API
+ - DOM
+ - KeyboardEvent
+ - events
+ - 鼠标事件
+translation_of: Web/API/KeyboardEvent/altKey
+---
+<p id="Summary">{{APIRef("DOM Events")}}</p>
+
+<p><strong><code>KeyboardEvent.altKey</code></strong> 只读属性返回一个 {{jsxref("Boolean")}} 值,表示事件触发时 <kbd>alt</kbd> 键 (OS X系统上的 <kbd>Option</kbd> 或 <kbd>⌥</kbd> 键) 是 (<code>true</code>) 否 (<code>false</code>) 被按下。</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">var <em>altKeyPressed</em> = <em>instanceOfKeyboardEvent</em>.altKey
+</pre>
+
+<h3 id="返回值">返回值</h3>
+
+<p>布尔值</p>
+
+<h2 id="示例">示例</h2>
+
+<pre class="brush: js">&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;altKey example&lt;/title&gt;
+
+&lt;script type="text/javascript"&gt;
+
+function showChar(e){
+ alert(
+ "Key Pressed: " + String.fromCharCode(e.charCode) + "\n"
+ + "charCode: " + e.charCode + "\n"
+ + "ALT key pressed: " + e.altKey + "\n"
+ );
+}
+
+&lt;/script&gt;
+&lt;/head&gt;
+
+&lt;body onkeypress="showChar(event);"&gt;
+&lt;p&gt;
+Press any character key,
+with or without holding down the ALT key.&lt;br /&gt;
+You can also use the SHIFT key together with the ALT key.
+&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;</pre>
+
+<h2 id="标准">标准</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('DOM3 Events','#widl-KeyboardEvent-altKey','KeyboardEvent.altkey')}}</td>
+ <td>{{Spec2('DOM3 Events')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">浏览器兼容性</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">特性
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Chrome</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>基本支持</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">特性
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>Android</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>基本支持</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">参考</h2>
+
+<ul>
+ <li>{{ domxref("KeyboardEvent") }}</li>
+</ul>
diff --git a/files/zh-cn/web/api/keyboardevent/charcode/index.html b/files/zh-cn/web/api/keyboardevent/charcode/index.html
new file mode 100644
index 0000000000..fe6523a655
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/charcode/index.html
@@ -0,0 +1,144 @@
+---
+title: KeyboardEvent.charCode
+slug: Web/API/KeyboardEvent/charCode
+tags:
+ - API
+ - DOM
+ - Deprecated
+ - KeyboardEvent
+ - events
+ - 键盘事件
+translation_of: Web/API/KeyboardEvent/charCode
+---
+<p>{{ ApiRef("DOM Events") }}{{non-standard_header}}{{deprecated_header}}</p>
+
+<p>{{domxref("KeyboardEvent.charCode")}} 只读属性,返回 {{ domxref("element.onkeypress", "keypress") }} 事件触发时按下的字符键的字符Unicode值。</p>
+
+<p>与这些数值代码等价的常量,请参考 {{ domxref("KeyboardEvent", "KeyEvent") }}.</p>
+
+<div class="note">
+<p><strong>该属性已被废弃,请勿再使用该属性。</strong></p>
+
+<p>请使用 {{domxref("KeyboardEvent.key")}} 取代。</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">语法</h2>
+
+<pre class="syntaxbox"><em>var value</em> = <em>event</em>.charCode;
+</pre>
+
+<ul>
+ <li><em><code>value</code></em> 被按下的字符键的字符Unicode值</li>
+</ul>
+
+<h2 id="Example" name="Example">示例</h2>
+
+<pre class="brush: js">&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;charCode example&lt;/title&gt;
+
+&lt;script type="text/javascript"&gt;
+
+function showChar(e)
+{
+alert("Key Pressed: " + String.fromCharCode(e.charCode) + "\n"
+ + "charCode: " + e.charCode);
+}
+
+&lt;/script&gt;
+&lt;/head&gt;
+
+&lt;body onkeypress="showChar(event);"&gt;
+&lt;p&gt;Press any 'character' type key.&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<h2 id="Notes" name="Notes">注意</h2>
+
+<p>在{{ domxref("element.onkeypress", "keypress") }} 事件中, 按键的Unicode值保存在 <code>{{ domxref("event.keyCode", "keyCode") }}</code> 或 <code>{{ domxref("event.charCode", "charCode") }}</code> 属性其中之一, 不会二者同时都有。如果按下的是字符键 (例如 'a'), <code>charCode</code> 被设置为字符的代码值, 并区分大小写。(即 <code>charCode</code> 会考虑 <code>Shift</code> 键是否被按下)。 否则,被按下的键的代码被存储在 <code>keyCode</code> 中。</p>
+
+<p>如果有一个或多个修饰键被按下,有一些复杂的规则来产生 <code>charCode</code> 的值,细节可参考  <a href="/en/Gecko_Keypress_Event" title="en/Gecko Keypress Event">Gecko Keypress 事件</a> 。</p>
+
+<p><code>charCode</code> 用于不会在 {{ domxref("element.onkeydown", "keydown") }} 和 {{ domxref("element.onkeyup", "keyup") }} 事件中被设置。这两种情况下,<code>keyCode</code> 会被设置。</p>
+
+<p>要获取按键代码而不考虑是 <code>keyCode</code> 还是<code>charCode</code>, 请使用 {{ domxref("event.which", "which") }} 属性。</p>
+
+<p>通过输入法输入的字符,不会被设置到注册到通过 <code>keyCode</code> 和 <code>charCode</code>。 <span class="comment">Actually with the Chinese IME I'm using, entering the IME results in a keypress event with keyCode = 229 and no other key events fire until the IME exits (which may happen after multiple characters are inputted). I'm not sure if other IME's work this way.</span></p>
+
+<p>要查看特定按键的 <code>charCode</code> 值的列表,运行这个示例页面 <a href="/en/Gecko_DOM_Reference/Examples#Example_7:_Displaying_Event_Object_Constants" title="en/Gecko_DOM_Reference/Examples#Example_7:_Displaying_Event_Object_Constants">Gecko DOM Reference:Examples #Example 7: Displaying Event Object Constants</a> ,然后查看HTML 表格结果。</p>
+
+<h2 id="Specifications" name="Specifications">标准</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('DOM3 Events','#widl-KeyboardEvent-charCode','KeyboardEvent.charCode')}}</td>
+ <td>{{Spec2('DOM3 Events')}}</td>
+ <td>Initial definition; specified as deprecated</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>特性</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>基本支持</td>
+ <td>26 (probably earlier)</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>3</td>
+ <td>9</td>
+ <td>12.1</td>
+ <td>5.1 (probably earlier)</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>特性</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>基本支持</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>5.1 (probably earlier)</td>
+ </tr>
+ </tbody>
+</table>
+</div>
diff --git a/files/zh-cn/web/api/keyboardevent/code/index.html b/files/zh-cn/web/api/keyboardevent/code/index.html
new file mode 100644
index 0000000000..f62c65ff00
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/code/index.html
@@ -0,0 +1,3816 @@
+---
+title: KeyboardEvent.code
+slug: Web/API/KeyboardEvent/code
+translation_of: Web/API/KeyboardEvent/code
+---
+<div>{{APIRef("DOM Events")}}</div>
+
+<p><code>KeyboardEvent.code</code>属性表示键盘上的物理键(与按键生成的字符相对)。换句话说,此属性返回一个值,该值不会被键盘布局或修饰键的状态改变。</p>
+
+<p>如果输入设备不是物理键盘,而是虚拟键盘或辅助功能设备,则浏览器将设置返回值,以尽可能地匹配物理键盘所发生的情况,从而最大限度地提高物理和虚拟输入设备之间的兼容性。</p>
+
+<p>当您想要根据输入设备上的物理位置处理键而不是与这些键相关联的字符时,此属性非常有用;这在编写代码来处理游戏输入时尤为常见,这些游戏使用键盘上的键来模拟类似游戏板的环境。但请注意,您无法使用 <code>KeyboardEvent.code</code>报告的值来确定击键生成的字符,因为键码的名称可能与按键上打印的实际字符或按下键时计算机生成的字符不匹配。</p>
+
+<p>例如,QWERTY布局键盘上的“<kbd>q</kbd>”键返回的<code>code</code>是“<code>KeyQ</code>”,但Dvorak键盘上的“<kbd>'</kbd>”键和AZERTY键盘上的“<kbd>a</kbd>”键也返回的相同<code>code</code>值。这使得如果用户没有使用预期的键盘布局,则无法使用<code>code</code>值来确定用户按键的名称。</p>
+
+<div>
+<p>要确定哪个字符与键事件对应,请改用{{domxref("KeyboardEvent.key")}}属性。</p>
+</div>
+
+
+<h2 id="示例">示例</h2>
+
+<h3 id="练习_KeyboardEvent">练习 KeyboardEvent</h3>
+
+<h4 id="HTML">HTML</h4>
+
+<pre class="brush: html">&lt;p&gt;Press keys on the keyboard to see what the KeyboardEvent's key and code
+ values are for each one.&lt;/p&gt;
+&lt;div id="output"&gt;
+&lt;/div&gt;
+</pre>
+
+<h4 id="CSS">CSS</h4>
+
+<pre class="brush: css">#output {
+ font-family: Arial, Helvetica, sans-serif;
+ border: 1px solid black;
+}</pre>
+
+<h4 id="JavaScript">JavaScript</h4>
+
+<pre class="brush: js">window.addEventListener("keydown", function(event) {
+ let str = "KeyboardEvent: key='" + event.key + "' | code='" +
+ event.code + "'";
+ let el = document.createElement("span");
+ el.innerHTML = str + "&lt;br/&gt;";
+
+ document.getElementById("output").appendChild(el);
+}, true);</pre>
+
+<h4 id="Try_it_out">Try it out</h4>
+
+<p>To ensure that keystrokes go to the sample, click in the output box below before pressing keys.</p>
+
+<p>{{ EmbedLiveSample('Exercising_KeyboardEvent', 600, 300) }}</p>
+
+<h3 id="Handle_keyboard_events_in_a_game">Handle keyboard events in a game</h3>
+
+<p>This example establishes an event listener for {{event("keydown")}} events which handles keyboard input for a game which uses the typical "WASD" keyboard layout for steering forward, left, backward, and right. This will use the same four keys physically regardless of what the actual corresponding characters are, such as if the user is using an AZERTY keyboard.</p>
+
+<h4 id="HTML_2">HTML</h4>
+
+<pre class="brush: html">&lt;p&gt;Use the WASD (ZQSD on AZERTY) keys to move and steer.&lt;/p&gt;
+&lt;svg xmlns="http://www.w3.org/2000/svg" version="1.1" class="world"&gt;
+  &lt;polygon id="spaceship" points="15,0 0,30 30,30"/&gt;
+&lt;/svg&gt;
+&lt;script&gt;refresh();&lt;/script&gt;
+</pre>
+
+<h4 id="CSS_2">CSS</h4>
+
+<pre class="brush: css">.world {
+ margin: 0px;
+ padding: 0px;
+ background-color: black;
+ width: 400px;
+ height: 400px;
+}
+
+#spaceship {
+ fill: orange;
+ stroke: red;
+ stroke-width: 2px;
+}</pre>
+
+<h4 id="JavaScript_2">JavaScript</h4>
+
+<p>The first section of the JavaScript code establishes some variables we'll be using. <code>shipSize</code> contains the size of the ship the player is moving around, for convenience. <code>position</code> is used to track the position of the ship within the play field. <code>moveRate</code> and <code>turnRate</code> are the number of pixels forward and backward each keystroke moves the ship and how many degrees of rotation the left and right steering controls apply per keystroke. angle is the current amount of rotation applied to the ship, in degrees; it starts at 0° (pointing straight up). Finally, <code>spaceship</code> is set to refer to the element with the ID <code>"spaceship"</code>, which is the SVG polygon representing the ship the player controls.</p>
+
+<pre class="brush: js">let shipSize = {
+ width: 30,
+ height: 30
+};
+
+let position = {
+ x: 200,
+ y: 200
+};
+
+let moveRate = 9;
+let turnRate = 5;
+
+let angle = 0;
+
+let spaceship = document.getElementById("spaceship");
+</pre>
+
+<p>Next comes the function <code>updatePosition()</code>. This function takes as input the distance the ship is to be moved, where positive is a forward movement and negative is a backward movement. This function computes the new position of the ship given the distance moved and the current direction the ship is facing. It also handles ensuring that the ship wraps across the boundaries of the play field instead of vanishing.</p>
+
+<pre class="brush: js">function updatePosition(offset) {
+ let rad = angle * (Math.PI/180);
+ position.x += (Math.sin(rad) * offset);
+ position.y -= (Math.cos(rad) * offset);
+
+ if (position.x &lt; 0) {
+ position.x = 399;
+ } else if (position.x &gt; 399) {
+ position.x = 0;
+ }
+
+ if (position.y &lt; 0) {
+ position.y = 399;
+ } else if (position.y &gt; 399) {
+ position.y = 0;
+ }
+}
+</pre>
+
+<p>The <code>refresh()</code> function handles applying the rotation and position by using an <a href="/en-US/docs/Web/SVG/Attribute/transform">SVG transform</a>.</p>
+
+<pre class="brush: js">function refresh() {
+ let x = position.x - (shipSize.width/2);
+ let y = position.y - (shipSize.height/2);
+ let transform = "translate(" + x + " " + y + ") rotate(" + angle + " 15 15) ";
+
+ spaceship.setAttribute("transform", transform);
+}
+</pre>
+
+<p>Finally, the <code>addEventListener()</code> method is used to start listening for {{event("keydown")}} events, acting on each key by updating the ship position and rotation angle, then calling <code>refresh()</code> to draw the ship at its new position and angle.</p>
+
+<pre class="brush: js">window.addEventListener("keydown", function(event) {
+ if (event.preventDefaulted) {
+ return; // Do nothing if event already handled
+ }
+
+ switch(event.code) {
+ case "KeyS":
+ case "ArrowDown":
+ // Handle "back"
+ updatePosition(-moveRate);
+ break;
+ case "KeyW":
+ case "ArrowUp":
+ // Handle "forward"
+ updatePosition(moveRate);
+ break;
+ case "KeyA":
+ case "ArrowLeft":
+ // Handle "turn left"
+ angle -= turnRate;
+ break;
+ case "KeyD":
+ case "ArrowRight":
+ // Handle "turn right"
+ angle += turnRate;
+ break;
+ }
+
+ refresh();
+
+ // Consume the event so it doesn't get handled twice
+ event.preventDefault();
+}, true);</pre>
+
+<h4 id="Try_it_out_2">Try it out</h4>
+
+<p>To ensure that keystrokes go to the sample code, click inside the black game play field below before pressing keys.</p>
+
+<p>{{EmbedLiveSample("Handle_keyboard_events_in_a_game", 420, 460)}}</p>
+
+<p>There are several ways this code can be made better. Most real games would watch for {{event("keydown")}} events, start motion when that happens, and stop the motion when the corresponding {{event("keyup")}} occurs, instead of relying on key repeats. That would allow both smoother and faster movement, but would also allow the player to be moving and steering at the same time. Transitions or animations could be used to make the ship's movement smoother, too.</p>
+
+<h2 id="Specification">Specification</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('UI Events', '#dom-keyboardevent-code', 'KeyboardEvent.code')}}</td>
+ <td>{{Spec2('UI Events')}}</td>
+ <td>Initial definition, included <a href="https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3Events-code.html">code values</a>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("api.KeyboardEvent.code")}}</p>
+
+<h2 id="Code_values">Code values</h2>
+
+<p>The following tables show what code values are used for each native scancode or virtual keycode on major platforms. Because some browsers choose to interpret physical keys differently, there are some differences in which keys map to which codes. These tables show those variations when known.</p>
+
+<h3 id="Code_values_on_Windows">Code values on Windows</h3>
+
+<p>This table shows the Windows scan codes representing keys and the <code>KeyboardEvent.code</code> values which correspond to those hardware keys. Only keys which generate scan codes on Windows are listed.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="row"> </th>
+ <th colspan="2" rowspan="1" scope="col" style="text-align: center;"><strong><code>KeyboardEvent.code</code></strong> value</th>
+ </tr>
+ <tr>
+ <th scope="row">Code</th>
+ <th scope="col">Firefox</th>
+ <th scope="col">Chrome</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row"><code>0x0000</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0001</code></th>
+ <td><code>"Escape"</code></td>
+ <td><code>"Escape"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0002</code></th>
+ <td><code>"Digit0"</code></td>
+ <td><code>"Digit0"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0003</code></th>
+ <td><code>"Digit1"</code></td>
+ <td><code>"Digit1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0004</code></th>
+ <td><code>"Digit2"</code></td>
+ <td><code>"Digit2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0005</code></th>
+ <td><code>"Digit3"</code></td>
+ <td><code>"Digit3"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0006</code></th>
+ <td><code>"Digit4"</code></td>
+ <td><code>"Digit4"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0007</code></th>
+ <td><code>"Digit5"</code></td>
+ <td><code>"Digit5"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0008</code></th>
+ <td><code>"Digit6"</code></td>
+ <td><code>"Digit6"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0009</code></th>
+ <td><code>"Digit7"</code></td>
+ <td><code>"Digit7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000A</code></th>
+ <td><code>"Digit8"</code></td>
+ <td><code>"Digit8"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000B</code></th>
+ <td><code>"Digit9"</code></td>
+ <td><code>"Digit9"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000C</code></th>
+ <td><code>"Minus"</code></td>
+ <td><code>"Minus"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000D</code></th>
+ <td><code>"Equal"</code></td>
+ <td><code>"Equal"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000E</code></th>
+ <td><code>"Backspace"</code></td>
+ <td><code>"Backspace"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000F</code></th>
+ <td><code>"Tab"</code></td>
+ <td><code>"Tab"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0010</code></th>
+ <td><code>"KeyQ"</code></td>
+ <td><code>"KeyQ"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0011</code></th>
+ <td><code>"KeyW"</code></td>
+ <td><code>"KeyW"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0012</code></th>
+ <td><code>"KeyE"</code></td>
+ <td><code>"KeyE"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0013</code></th>
+ <td><code>"KeyR"</code></td>
+ <td><code>"KeyR"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0014</code></th>
+ <td><code>"KeyT"</code></td>
+ <td><code>"KeyT"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0015</code></th>
+ <td><code>"KeyY"</code></td>
+ <td><code>"KeyY"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0016</code></th>
+ <td><code>"KeyU"</code></td>
+ <td><code>"KeyU"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0017</code></th>
+ <td><code>"KeyI"</code></td>
+ <td><code>"KeyI"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0018</code></th>
+ <td><code>"KeyO"</code></td>
+ <td><code>"KeyO"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0019</code></th>
+ <td><code>"KeyP"</code></td>
+ <td><code>"KeyP"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001A</code></th>
+ <td><code>"BracketLeft"</code></td>
+ <td><code>"BracketLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001B</code></th>
+ <td><code>"BracketRight"</code></td>
+ <td><code>"BracketRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001C</code></th>
+ <td><code>"Enter"</code></td>
+ <td><code>"Enter"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001D</code></th>
+ <td><code>"ControlLeft"</code></td>
+ <td><code>"ControlLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001E</code></th>
+ <td><code>"KeyA"</code></td>
+ <td><code>"KeyA"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001F</code></th>
+ <td><code>"KeyS"</code></td>
+ <td><code>"KeyS"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0020</code></th>
+ <td><code>"KeyD"</code></td>
+ <td><code>"KeyD"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0021</code></th>
+ <td><code>"KeyF"</code></td>
+ <td><code>"KeyF"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0022</code></th>
+ <td><code>"KeyG"</code></td>
+ <td><code>"KeyG"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0023</code></th>
+ <td><code>"KeyH"</code></td>
+ <td><code>"KeyH"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0024</code></th>
+ <td><code>"KeyJ"</code></td>
+ <td><code>"KeyJ"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0025</code></th>
+ <td><code>"KeyK"</code></td>
+ <td><code>"KeyK"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0026</code></th>
+ <td><code>"KeyL"</code></td>
+ <td><code>"KeyL"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0027</code></th>
+ <td><code>"Semicolon"</code></td>
+ <td><code>"Semicolon"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0028</code></th>
+ <td><code>"Quote"</code></td>
+ <td><code>"Quote"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0029</code></th>
+ <td><code>"Backquote"</code></td>
+ <td><code>"Backquote"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002A</code></th>
+ <td><code>"ShiftLeft"</code></td>
+ <td><code>"ShiftLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002B</code></th>
+ <td><code>"Backslash"</code></td>
+ <td><code>"Backslash"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002C</code></th>
+ <td><code>"KeyZ"</code></td>
+ <td><code>"KeyZ"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002D</code></th>
+ <td><code>"KeyX"</code></td>
+ <td><code>"KeyX"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002E</code></th>
+ <td><code>"KeyC"</code></td>
+ <td><code>"KeyC"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002F</code></th>
+ <td><code>"KeyV"</code></td>
+ <td><code>"KeyV"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0030</code></th>
+ <td><code>"KeyB"</code></td>
+ <td><code>"KeyB"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0031</code></th>
+ <td><code>"KeyN"</code></td>
+ <td><code>"KeyN"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0032</code></th>
+ <td><code>"KeyM"</code></td>
+ <td><code>"KeyM"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0033</code></th>
+ <td><code>"Comma"</code></td>
+ <td><code>"Comma"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0034</code></th>
+ <td><code>"Period"</code></td>
+ <td><code>"Period"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0035</code></th>
+ <td><code>"Slash"</code></td>
+ <td><code>"Slash"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0036</code></th>
+ <td><code>"ShiftRight"</code></td>
+ <td><code>"ShiftRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0037</code></th>
+ <td><code>"NumpadMultiply"</code></td>
+ <td><code>"NumpadMultiply"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0038</code></th>
+ <td><code>"AltLeft"</code></td>
+ <td><code>"AltLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0039</code></th>
+ <td><code>"Space"</code></td>
+ <td><code>"Space"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003A</code></th>
+ <td><code>"CapsLock"</code></td>
+ <td><code>"CapsLock"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003B</code></th>
+ <td><code>"F1"</code></td>
+ <td><code>"F1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003C</code></th>
+ <td><code>"F2"</code></td>
+ <td><code>"F2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003D</code></th>
+ <td><code>"F3"</code></td>
+ <td><code>"F3"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003E</code></th>
+ <td><code>"F4"</code></td>
+ <td><code>"F4"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003F</code></th>
+ <td><code>"F5"</code></td>
+ <td><code>"F5"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0040</code></th>
+ <td><code>"F6"</code></td>
+ <td><code>"F6"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0041</code></th>
+ <td><code>"F7"</code></td>
+ <td><code>"F7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0042</code></th>
+ <td><code>"F8"</code></td>
+ <td><code>"F8"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0043</code></th>
+ <td><code>"F9"</code></td>
+ <td><code>"F9"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0044</code></th>
+ <td><code>"F10"</code></td>
+ <td><code>"F10"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0045</code></th>
+ <td><code>"Pause"</code></td>
+ <td><code>"Pause"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0046</code></th>
+ <td><code>"ScrollLock"</code></td>
+ <td><code>"ScrollLock"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0047</code></th>
+ <td><code>"Numpad7"</code></td>
+ <td><code>"Numpad7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0048</code></th>
+ <td><code>"Numpad8"</code></td>
+ <td><code>"Numpad8"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0049</code></th>
+ <td><code>"Numpad9"</code></td>
+ <td><code>"Numpad9"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004A</code></th>
+ <td><code>"NumpadSubtract"</code></td>
+ <td><code>"NumpadSubtract"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004B</code></th>
+ <td><code>"Numpad4"</code></td>
+ <td><code>"Numpad4"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004C</code></th>
+ <td><code>"Numpad5"</code></td>
+ <td><code>"Numpad5"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004D</code></th>
+ <td><code>"Numpad6"</code></td>
+ <td><code>"Numpad6"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004E</code></th>
+ <td><code>"NumpadAdd"</code></td>
+ <td><code>"NumpadAdd"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004F</code></th>
+ <td><code>"Numpad1"</code></td>
+ <td><code>"Numpad1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0050</code></th>
+ <td><code>"Numpad2"</code></td>
+ <td><code>"Numpad2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0051</code></th>
+ <td><code>"Numpad3"</code></td>
+ <td><code>"Numpad3"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0052</code></th>
+ <td><code>"Numpad0"</code></td>
+ <td><code>"Numpad0"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0053</code></th>
+ <td><code>"NumpadDecimal"</code></td>
+ <td><code>"NumpadDecimal"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0054 (<kbd>Alt</kbd> + <kbd>PrintScreen</kbd>)</code></th>
+ <td><code>"PrintScreen"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0055</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0056</code></th>
+ <td><code>"IntlBackslash"</code></td>
+ <td><code>"IntlBackslash"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0057</code></th>
+ <td><code>"F11"</code></td>
+ <td><code>"F11"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0058</code></th>
+ <td><code>"F12"</code></td>
+ <td><code>"F12"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0059</code></th>
+ <td><code>"NumpadEqual"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005A</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005B</code></th>
+ <td style="background-color: rgb(255, 255, 204);">
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F13"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005C</code></th>
+ <td style="background-color: rgb(255, 255, 204);">
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F14"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005D</code></th>
+ <td style="background-color: rgb(255, 255, 204);">
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F15"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005E</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005F</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0060</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0061</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0062</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0063</code></th>
+ <td style="background-color: rgb(255, 255, 204);">
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F16"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0064</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F13"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F17"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0065</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F14"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F18"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0066</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F15"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F19"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0067</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F16"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F20"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0068</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F17"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F21"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0069</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F18"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F22"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006A</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F19"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F23"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006B</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F20"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F24"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006C</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F21"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006D</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F22"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006E</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F23"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006F</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0070</code></th>
+ <td><code>"KanaMode"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0071</code> (<kbd>Hanja</kbd> key without Korean keyboard layout)</th>
+ <td><code>"Lang2"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0072</code> (<kbd>Han/Yeong</kbd> key without Korean keyboard layout)</th>
+ <td><code>"Lang1"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0073</code></th>
+ <td><code>"IntlRo"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0074</code>, <code>0x0075</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0076</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F24"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0077</code>, <code>0x0078</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0079</code></th>
+ <td><code>"Convert"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007A</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007B</code></th>
+ <td><code>"NonConvert"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007C</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007D</code></th>
+ <td><code>"IntlYen"</code></td>
+ <td><code>"IntlYen"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007E</code></th>
+ <td><code>"NumpadComma"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007F</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE000</code> ~ <code>0xE007</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE008</code></th>
+ <td style="background-color: rgb(255, 255, 204);">
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Undo"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE009</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE00A</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Paste"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE00B</code> ~ <code>0xE00F</code></th>
+ <td>""</td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE010</code></th>
+ <td><code>"MediaTrackPrevious"</code></td>
+ <td><code>"MediaTrackPrevious"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE011</code> ~ <code>0xE016</code></th>
+ <td><code>""</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE017</code></th>
+ <td style="background-color: rgb(255, 255, 204);">
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Cut"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE018</code></th>
+ <td style="background-color: rgb(255, 255, 204);">
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Copy"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE019</code></th>
+ <td><code>"MediaTrackNext"</code></td>
+ <td><code>"MediaTrackNext"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE01A, 0xE01B</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE01C</code></th>
+ <td><code>"NumpadEnter"</code></td>
+ <td><code>"NumpadEnter"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE01D</code></th>
+ <td><code>"ControlRight"</code></td>
+ <td><code>"ControlRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE01E</code></th>
+ <td style="background-color: rgb(255, 255, 204);">
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"LaunchMail"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE01F</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE020</code></th>
+ <td><code>"AudioVolumeMute"</code> (was <code>"VolumeMute"</code> until Firefox 49)</td>
+ <td><code>"AudioVolumeMute"</code> (was <code>"VolumeMute"</code> until Chrome 50)</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE021</code></th>
+ <td><code>"LaunchApp2"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE022</code></th>
+ <td><code>"MediaPlayPause"</code></td>
+ <td><code>"MediaPlayPause"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE023</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE024</code></th>
+ <td><code>"MediaStop"</code></td>
+ <td><code>"MediaStop"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE025</code> ~ <code>0xE02B</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE02C</code></th>
+ <td style="background-color: rgb(255, 255, 204);">
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Eject"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE02D</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE02E</code></th>
+ <td>
+ <p><code>"AudioVolumeDown"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>"VolumeDown"</code>.</p>
+ </div>
+ </td>
+ <td><code>"VolumeDown"</code> (was <code>"VolumeDown"</code> until Chrome 50)</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE02F</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE030</code></th>
+ <td>
+ <p><code>"AudioVolumeUp"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>"VolumeUp"</code>.</p>
+ </div>
+ </td>
+ <td><code>"VolumeUp"</code> (was <code>"VolumeUp"</code> until Chrome 50)</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE031</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE032</code></th>
+ <td><code>"BrowserHome"</code></td>
+ <td><code>"BrowserHome"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE033</code>, <code>0xE034</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE035</code></th>
+ <td><code>"NumpadDivide"</code></td>
+ <td><code>"NumpadDivide"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE036</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE037</code></th>
+ <td><code>"PrintScreen"</code></td>
+ <td><code>"PrintScreen"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE038</code></th>
+ <td><code>"AltRight"</code></td>
+ <td><code>"AltRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE039</code>, <code>0xE03A</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE03B</code></th>
+ <td style="background-color: rgb(255, 255, 204);">
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Help"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE03C</code>~ <code>0xE044</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE045</code></th>
+ <td><code>"NumLock"</code></td>
+ <td><code>"NumLock"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE046</code> (<kbd>Ctrl</kbd> + <kbd>Pause</kbd>)</th>
+ <td><code>"Pause"</code></td>
+ <td><code>"Pause"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE047</code></th>
+ <td><code>"Home"</code></td>
+ <td><code>"Home"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE048</code></th>
+ <td><code>"ArrowUp"</code></td>
+ <td><code>"ArrowUp"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE049</code></th>
+ <td><code>"PageUp"</code></td>
+ <td><code>"PageUp"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE04A</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE04B</code></th>
+ <td><code>"ArrowLeft"</code></td>
+ <td><code>"ArrowLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE04C</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE04D</code></th>
+ <td><code>"ArrowRight"</code></td>
+ <td><code>"ArrowRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE04E</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE04F</code></th>
+ <td><code>"End"</code></td>
+ <td><code>"End"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE050</code></th>
+ <td><code>"ArrowDown"</code></td>
+ <td><code>"ArrowDown"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE051</code></th>
+ <td><code>"PageDown"</code></td>
+ <td><code>"PageDown"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE052</code></th>
+ <td><code>"Insert"</code></td>
+ <td><code>"Insert"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE053</code></th>
+ <td><code>"Delete"</code></td>
+ <td><code>"Delete"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE054</code> ~ <code>0xE05A</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE05B</code></th>
+ <td>
+ <p><code>"MetaLeft"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code was reported as <code>"OSLeft"</code>.</p>
+ </div>
+ </td>
+ <td><code>"OSLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE05C</code></th>
+ <td>
+ <p><code>"MetaRight"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code was reported as <code>"OSRight"</code>.</p>
+ </div>
+ </td>
+ <td><code>"OSRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE05D</code></th>
+ <td><code>"ContextMenu"</code></td>
+ <td><code>"ContextMenu"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE05E</code></th>
+ <td><code>"Power"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE05F</code> ~ <code>0xE064</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE065</code></th>
+ <td><code>"BrowserSearch"</code></td>
+ <td><code>"BrowserSearch"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE066</code></th>
+ <td><code>"BrowserFavorites"</code></td>
+ <td><code>"BrowserFavorites"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE067</code></th>
+ <td><code>"BrowserRefresh"</code></td>
+ <td><code>"BrowserRefresh"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE068</code></th>
+ <td><code>"BrowserStop"</code></td>
+ <td><code>"BrowserStop"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE069</code></th>
+ <td><code>"BrowserForward"</code></td>
+ <td><code>"BrowserForward"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE06A</code></th>
+ <td><code>"BrowserBack"</code></td>
+ <td><code>"BrowserBack"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE06B</code></th>
+ <td><code>"LaunchApp1"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE06C</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"LaunchMail"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE06D</code></th>
+ <td><code>"LaunchMediaPlayer"</code> (<code>"MediaSelect"</code> prior to Firefox 49)</td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE06E ~ 0xE0F0</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE0F1</code> (<kbd>Hanja</kbd> key with Korean keyboard layout)</th>
+ <td><code>"Lang2"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0xE0F2</code> (<kbd>Han/Yeong</kbd> key with Korean keyboard layout)</th>
+ <td><code>"Lang1"</code></td>
+ <td style="background-color: rgb(220, 199, 255);"><code>""</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Code_values_on_Mac">Code values on Mac</h3>
+
+<p>On Mac OS X, it's hard to get scancode or something which can distinguish a physical key from a key event. Therefore, Gecko always maps <code>code</code> value from the virtual keycode.</p>
+
+<table class="standard-table" id="keyname_table_mac">
+ <thead>
+ <tr>
+ <th scope="row">Virtual keycode</th>
+ <th colspan="1" rowspan="1" scope="col">Gecko {{gecko_minversion_inline("32.0")}}</th>
+ <th rowspan="1" scope="col">Chromium (48)</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_A (0x00)</code></th>
+ <td><code>"KeyA"</code></td>
+ <td><code>"KeyA"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_S (0x01)</code></th>
+ <td><code>"KeyS"</code></td>
+ <td><code>"KeyS"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_D (0x02)</code></th>
+ <td><code>"KeyD"</code></td>
+ <td><code>"KeyD"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_F (0x03)</code></th>
+ <td><code>"KeyF"</code></td>
+ <td><code>"KeyF"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_H (0x04)</code></th>
+ <td><code>"KeyH"</code></td>
+ <td><code>"KeyH"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_G (0x05)</code></th>
+ <td><code>"KeyG"</code></td>
+ <td><code>"KeyG"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Z (0x06)</code></th>
+ <td><code>"KeyZ"</code></td>
+ <td><code>"KeyZ"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_X (0x07)</code></th>
+ <td><code>"KeyX"</code></td>
+ <td><code>"KeyX"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_C (0x08)</code></th>
+ <td><code>"KeyC"</code></td>
+ <td><code>"KeyC"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_V (0x09)</code></th>
+ <td><code>"KeyV"</code></td>
+ <td><code>"KeyV"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ISO_Section (0x0A)</code></th>
+ <td><code>"IntlBackslash"</code></td>
+ <td><code>"IntlBackslash"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_B (0x0B)</code></th>
+ <td><code>"KeyB"</code></td>
+ <td><code>"KeyB"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Q (0x0C)</code></th>
+ <td><code>"KeyQ"</code></td>
+ <td><code>"KeyQ"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_W (0x0D)</code></th>
+ <td><code>"KeyW"</code></td>
+ <td><code>"KeyW"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_E (0x0E)</code></th>
+ <td><code>"KeyE"</code></td>
+ <td><code>"KeyE"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_R (0x0F)</code></th>
+ <td><code>"KeyR"</code></td>
+ <td><code>"KeyR"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Y (0x10)</code></th>
+ <td><code>"KeyY"</code></td>
+ <td><code>"KeyY"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_T (0x11)</code></th>
+ <td><code>"KeyT"</code></td>
+ <td><code>"KeyT"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_1 (0x12)</code></th>
+ <td><code>"Digit1"</code></td>
+ <td><code>"Digit1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_2 (0x13)</code></th>
+ <td><code>"Digit2"</code></td>
+ <td><code>"Digit2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_3 (0x14)</code></th>
+ <td><code>"Digit3"</code></td>
+ <td><code>"Digit3"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_4 (0x15)</code></th>
+ <td><code>"Digit4"</code></td>
+ <td><code>"Digit4"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_6 (0x16)</code></th>
+ <td><code>"Digit6"</code></td>
+ <td><code>"Digit6"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_5 (0x17)</code></th>
+ <td><code>"Digit7"</code></td>
+ <td><code>"Digit7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Equal (0x18)</code></th>
+ <td><code>"Equal"</code></td>
+ <td><code>"Equal"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_9 (0x19)</code></th>
+ <td><code>"Digit9"</code></td>
+ <td><code>"Digit9"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_7 (0x1A)</code></th>
+ <td><code>"Digit7"</code></td>
+ <td><code>"Digit7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Minus (0x1B)</code></th>
+ <td><code>"Minus"</code></td>
+ <td><code>"Minus"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_8 (0x1C)</code></th>
+ <td><code>"Digit8"</code></td>
+ <td><code>"Digit8"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_0 (0x1D)</code></th>
+ <td><code>"Digit0"</code></td>
+ <td><code>"Digit0"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_RightBracket (0x1E)</code></th>
+ <td><code>"BracketRight"</code></td>
+ <td><code>"BracketRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_O (0x1F)</code></th>
+ <td><code>"KeyO"</code></td>
+ <td><code>"KeyO"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_U (0x20)</code></th>
+ <td><code>"KeyU"</code></td>
+ <td><code>"KeyU"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_LeftBracket (0x21)</code></th>
+ <td><code>"BracketLeft"</code></td>
+ <td><code>"BracketLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_I (0x22)</code></th>
+ <td><code>"KeyI"</code></td>
+ <td><code>"KeyI"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_P (0x23)</code></th>
+ <td><code>"KeyP"</code></td>
+ <td><code>"KeyP"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Return (0x24)</code></th>
+ <td><code>"Enter"</code></td>
+ <td><code>"Enter"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_L (0x25)</code></th>
+ <td><code>"KeyL"</code></td>
+ <td><code>"KeyL"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_J (0x26)</code></th>
+ <td><code>"KeyJ"</code></td>
+ <td><code>"KeyJ"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Quote (0x27)</code></th>
+ <td><code>"Quote"</code></td>
+ <td><code>"Quote"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_K (0x28)</code></th>
+ <td><code>"KeyK"</code></td>
+ <td><code>"KeyK"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Semicolon (0x29)</code></th>
+ <td><code>"Semicolon"</code></td>
+ <td><code>"Semicolon"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Tab (0x30)</code></th>
+ <td><code>"Tab"</code></td>
+ <td><code>"Tab"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Space (0x31)</code></th>
+ <td><code>"Space"</code></td>
+ <td><code>"Space"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Grave (0x32)</code></th>
+ <td><code>"Backquote"</code></td>
+ <td><code>"Backquote"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Delete (0x33)</code></th>
+ <td><code>"Backspace"</code></td>
+ <td><code>"Backspace"</code></td>
+ </tr>
+ <tr>
+ <th scope="row">Enter key on keypad of PowerBook (<code>0x34</code>)</th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"NumpadEnter"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Escape (0x35)</code></th>
+ <td><code>"Escape"</code></td>
+ <td><code>"Escape"</code></td>
+ </tr>
+ <tr>
+ <th scope="row">right-command key (<code>0x36</code>)</th>
+ <td><code>"OSRight"</code></td>
+ <td><code>"OSRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Command (0x37)</code></th>
+ <td><code>"OSLeft"</code></td>
+ <td><code>"OSLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Shift (0x38)</code></th>
+ <td><code>"ShiftLeft"</code></td>
+ <td><code>"ShiftLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_CapsLock (0x39)</code></th>
+ <td><code>"CapsLock"</code></td>
+ <td><code>"CapsLock"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Option (0x3A)</code></th>
+ <td><code>"AltLeft"</code></td>
+ <td><code>"AltLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Control (0x3B)</code></th>
+ <td><code>"ControlLeft"</code></td>
+ <td><code>"ControlLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_RightShift (0x3C)</code></th>
+ <td><code>"ShiftRight"</code></td>
+ <td><code>"ShiftRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_RightOption (0x3D)</code></th>
+ <td><code>"AltRight"</code></td>
+ <td><code>"AltRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_RightControl (0x3E)</code></th>
+ <td><code>"ControlRight"</code></td>
+ <td><code>"ControlRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Function (0x3F)</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Fn"</code><em> (no events fired actually)</em></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code><em> (no events fired actually)</em></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F17 (0x40)</code></th>
+ <td><code>"F17"</code></td>
+ <td><code>"F17"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_KeypadDecimal (0x41)</code></th>
+ <td><code>"NumpadDecimal"</code></td>
+ <td><code>"NumpadDecimal"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_KeypadMultiply (0x43)</code></th>
+ <td><code>"NumpadMultiply"</code></td>
+ <td><code>"NumpadMultiply"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_KeypadPlus (0x45)</code></th>
+ <td><code>"NumpadAdd"</code></td>
+ <td><code>"NumpadAdd"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_KeypadClear (0x47)</code></th>
+ <td><code>"NumLock"</code></td>
+ <td><code>"NumLock"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_VolumeUp (0x48)</code></th>
+ <td><code>"AudioVolumeUp" </code>(was <code>"VolumeUp"</code> until Firefox 48)</td>
+ <td><code>"AudioVolumeUp" </code>(was <code>"VolumeUp"</code> until Chrome 50)</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_VolumeDown (0x49)</code></th>
+ <td><code>"AudioVolumeDown"</code> (was <code>"VolumeDown"</code> until Firefox 49)</td>
+ <td><code>"AudioVolumeDown"</code> (was <code>"VolumeDown"</code> until Chrome 50)</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Mute (0x4A)</code></th>
+ <td><code>"AudioVolumeMute"</code> (was <code>"VolumeMute"</code> until Firefox 49)</td>
+ <td><code>"AudioVolumeMute"</code> (was <code>"VolumeMute"</code> until Chrome 50)</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_KeypadDivide (0x4B)</code></th>
+ <td><code>"NumpadDivide"</code></td>
+ <td><code>"NumpadDivide"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_KeypadEnter (0x4C)</code></th>
+ <td><code>"NumpadEnter"</code></td>
+ <td><code>"NumpadEnter"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_KeypadMinus (0x4E)</code></th>
+ <td><code>"NumpadSubtract"</code></td>
+ <td><code>"NumpadSubtract"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F18 (0x4F)</code></th>
+ <td><code>"F18"</code></td>
+ <td><code>"F18"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F19 (0x50)</code></th>
+ <td><code>"F19"</code></td>
+ <td><code>"F19"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_KeypadEquals (0x51)</code></th>
+ <td><code>"NumpadEqual"</code></td>
+ <td><code>"NumpadEqual"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Keypad0 (0x52)</code></th>
+ <td><code>"Numpad0"</code></td>
+ <td><code>"Numpad0"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Keypad1 (0x53)</code></th>
+ <td><code>"Numpad1"</code></td>
+ <td><code>"Numpad1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Keypad2 (0x54)</code></th>
+ <td><code>"Numpad2"</code></td>
+ <td><code>"Numpad2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Keypad3 (0x55)</code></th>
+ <td><code>"Numpad3"</code></td>
+ <td><code>"Numpad3"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Keypad4 (0x56)</code></th>
+ <td><code>"Numpad4"</code></td>
+ <td><code>"Numpad4"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Keypad5 (0x57)</code></th>
+ <td><code>"Numpad5"</code></td>
+ <td><code>"Numpad5"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Keypad6 (0x58)</code></th>
+ <td><code>"Numpad6"</code></td>
+ <td><code>"Numpad6"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Keypad7 (0x59)</code></th>
+ <td><code>"Numpad7"</code></td>
+ <td><code>"Numpad7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F20 (0x5A)</code></th>
+ <td><code>"F20"</code></td>
+ <td><code>"F20"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Keypad8 (0x5B)</code></th>
+ <td><code>"Numpad8"</code></td>
+ <td><code>"Numpad8"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ANSI_Keypad9 (0x5C)</code></th>
+ <td><code>"Numpad9"</code></td>
+ <td><code>"Numpad9"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_JIS_Yen (0x5D)</code></th>
+ <td><code>"IntlYen"</code></td>
+ <td><code>"IntlYen"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_JIS_Underscore (0x5E)</code></th>
+ <td><code>"IntlRo"</code></td>
+ <td><code>"IntlRo"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_JIS_KeypadComma (0x5F)</code></th>
+ <td><code>"NumpadComma"</code></td>
+ <td><code>"NumpadComma"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F5 (0x60)</code></th>
+ <td><code>"F5"</code></td>
+ <td><code>"F5"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F6 (0x61)</code></th>
+ <td><code>"F6"</code></td>
+ <td><code>"F6"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F7 (0x62)</code></th>
+ <td><code>"F7"</code></td>
+ <td><code>"F7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F3 (0x63)</code></th>
+ <td><code>"F3"</code></td>
+ <td><code>"F3"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F8 (0x64)</code></th>
+ <td><code>"F8"</code></td>
+ <td><code>"F8"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F9 (0x65)</code></th>
+ <td><code>"F9"</code></td>
+ <td><code>"F9"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_JIS_Eisu (0x66)</code></th>
+ <td style="background-color: rgb(255, 255, 204);">
+ <p><code>"Lang2"</code></p>
+
+ <div class="note">
+ <p>Prior to <a href="/en-US/docs/Mozilla/Firefox/Releases/37">Firefox 37</a>, this key incorrectly generated the key code <code>"RomanCharacters"</code>.</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code><em> (no events fired actually)</em></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F11 (0x67)</code></th>
+ <td><code>"F11"</code></td>
+ <td><code>"F11"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_JIS_Kana (0x68)</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Lang1"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"KanaMode"</code><em> (no events fired actually)</em></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F13 (0x69)</code></th>
+ <td><code>"F13"</code></td>
+ <td><code>"F13"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F16 (0x6A)</code></th>
+ <td><code>"F16"</code></td>
+ <td><code>"F16"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F14 (0x6B)</code></th>
+ <td><code>"F14"</code></td>
+ <td><code>"F14"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F10 (0x6D)</code></th>
+ <td><code>"F10"</code></td>
+ <td><code>"F10"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F12 (0x6F)</code></th>
+ <td><code>"F12"</code></td>
+ <td><code>"F12"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F15 (0x71)</code></th>
+ <td><code>"F15"</code></td>
+ <td><code>"F15"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Help (0x72)</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Help"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Insert"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_Home (0x73)</code></th>
+ <td><code>"Home"</code></td>
+ <td><code>"Home"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_PageUp (0x74)</code></th>
+ <td><code>"PageUp"</code></td>
+ <td><code>"PageUp"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_ForwardDelete (0x75)</code></th>
+ <td><code>"Delete"</code></td>
+ <td><code>"Delete"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F4 (0x76)</code></th>
+ <td><code>"F4"</code></td>
+ <td><code>"F4"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_End (0x77)</code></th>
+ <td><code>"End"</code></td>
+ <td><code>"End"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F2 (0x78)</code></th>
+ <td><code>"F2"</code></td>
+ <td><code>"F2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_PageDown (0x79)</code></th>
+ <td><code>"PageDown"</code></td>
+ <td><code>"PageDown"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_F1 (0x7A)</code></th>
+ <td><code>"F1"</code></td>
+ <td><code>"F1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_LeftArrow (0x7B)</code></th>
+ <td><code>"ArrowLeft"</code></td>
+ <td><code>"ArrowLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_RightArrow (0x7C)</code></th>
+ <td><code>"ArrowRight"</code></td>
+ <td><code>"ArrowRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_DownArrow (0x7D)</code></th>
+ <td><code>"ArrowDown"</code></td>
+ <td><code>"ArrowDown"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>kVK_UpArrow (0x7E)</code></th>
+ <td><code>"ArrowUp"</code></td>
+ <td><code>"ArrowUp"</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Code_values_on_Linux_(X11)_(When_scancode_is_available)">Code values on Linux (X11) (When scancode is available)</h3>
+
+<p>Note that X has too many keys and some of them are not testable with usual keyboard. So, following table is created from source code which maps from scancode to code value.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="row">scancode (hardware_keycode)</th>
+ <th scope="col">Gecko {{gecko_minversion_inline("32.0")}}</th>
+ <th scope="col">Chromium (44)</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row"><code>0x0009</code></th>
+ <td><code>"Escape"</code></td>
+ <td><code>"Escape"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000A</code></th>
+ <td><code>"Digit1"</code></td>
+ <td><code>"Digit1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000B</code></th>
+ <td><code>"Digit2"</code></td>
+ <td><code>"Digit2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000C</code></th>
+ <td><code>"Digit3"</code></td>
+ <td><code>"Digit3"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000D</code></th>
+ <td><code>"Digit4"</code></td>
+ <td><code>"Digit4"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000E</code></th>
+ <td><code>"Digit5"</code></td>
+ <td><code>"Digit5"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000F</code></th>
+ <td><code>"Digit6"</code></td>
+ <td><code>"Digit6"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0010</code></th>
+ <td><code>"Digit7"</code></td>
+ <td><code>"Digit7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0011</code></th>
+ <td><code>"Digit8"</code></td>
+ <td><code>"Digit8"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0012</code></th>
+ <td><code>"Digit9"</code></td>
+ <td><code>"Digit9"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0013</code></th>
+ <td><code>"Digit0"</code></td>
+ <td><code>"Digit0"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0014</code></th>
+ <td><code>"Minus"</code></td>
+ <td><code>"Minus"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0015</code></th>
+ <td><code>"Equal"</code></td>
+ <td><code>"Equal"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0016</code></th>
+ <td><code>"Backspace"</code></td>
+ <td><code>"Backspace"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0017</code></th>
+ <td><code>"Tab"</code></td>
+ <td><code>"Tab"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0018</code></th>
+ <td><code>"KeyQ"</code></td>
+ <td><code>"KeyQ"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0019</code></th>
+ <td><code>"KeyW"</code></td>
+ <td><code>"KeyW"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001A</code></th>
+ <td><code>"KeyE"</code></td>
+ <td><code>"KeyE"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001B</code></th>
+ <td><code>"KeyR"</code></td>
+ <td><code>"KeyR"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001C</code></th>
+ <td><code>"KeyT"</code></td>
+ <td><code>"KeyT"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001D</code></th>
+ <td><code>"KeyY"</code></td>
+ <td><code>"KeyY"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001E</code></th>
+ <td><code>"KeyU"</code></td>
+ <td><code>"KeyU"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001F</code></th>
+ <td><code>"KeyI"</code></td>
+ <td><code>"KeyI"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0020</code></th>
+ <td><code>"KeyO"</code></td>
+ <td><code>"KeyO"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0021</code></th>
+ <td><code>"KeyP"</code></td>
+ <td><code>"KeyP"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0022</code></th>
+ <td><code>"BracketLeft"</code></td>
+ <td><code>"BracketLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0023</code></th>
+ <td><code>"BracketRight"</code></td>
+ <td><code>"BracketRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0024</code></th>
+ <td><code>"Enter"</code></td>
+ <td><code>"Enter"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0025</code></th>
+ <td><code>"ControlLeft"</code></td>
+ <td><code>"ControlLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0026</code></th>
+ <td><code>"KeyA"</code></td>
+ <td><code>"KeyA"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0027</code></th>
+ <td><code>"KeyS"</code></td>
+ <td><code>"KeyS"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0028</code></th>
+ <td><code>"KeyD"</code></td>
+ <td><code>"KeyD"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0029</code></th>
+ <td><code>"KeyF"</code></td>
+ <td><code>"KeyF"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002A</code></th>
+ <td><code>"KeyG"</code></td>
+ <td><code>"KeyG"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002B</code></th>
+ <td><code>"KeyH"</code></td>
+ <td><code>"KeyH"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002C</code></th>
+ <td><code>"KeyJ"</code></td>
+ <td><code>"KeyJ"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002D</code></th>
+ <td><code>"KeyK"</code></td>
+ <td><code>"KeyK"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002E</code></th>
+ <td><code>"KeyL"</code></td>
+ <td><code>"KeyL"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002F</code></th>
+ <td><code>"Semicolon"</code></td>
+ <td><code>"Semicolon"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0030</code></th>
+ <td><code>"Quote"</code></td>
+ <td><code>"Quote"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0031</code></th>
+ <td><code>"Backquote"</code></td>
+ <td><code>"Backquote"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0032</code></th>
+ <td><code>"ShiftLeft"</code></td>
+ <td><code>"ShiftLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0033</code></th>
+ <td><code>"Backslash"</code></td>
+ <td><code>"Backslash"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0034</code></th>
+ <td><code>"KeyZ"</code></td>
+ <td><code>"KeyZ"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0035</code></th>
+ <td><code>"KeyX"</code></td>
+ <td><code>"KeyX"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0036</code></th>
+ <td><code>"KeyC"</code></td>
+ <td><code>"KeyC"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0037</code></th>
+ <td><code>"KeyV"</code></td>
+ <td><code>"KeyV"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0038</code></th>
+ <td><code>"KeyB"</code></td>
+ <td><code>"KeyB"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0039</code></th>
+ <td><code>"KeyN"</code></td>
+ <td><code>"KeyN"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003A</code></th>
+ <td><code>"KeyM"</code></td>
+ <td><code>"KeyM"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003B</code></th>
+ <td><code>"Comma"</code></td>
+ <td><code>"Comma"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003C</code></th>
+ <td><code>"Period"</code></td>
+ <td><code>"Period"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003D</code></th>
+ <td><code>"Slash"</code></td>
+ <td><code>"Slash"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003E</code></th>
+ <td><code>"ShiftRight"</code></td>
+ <td><code>"ShiftRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003F</code></th>
+ <td><code>"NumpadMultiply"</code></td>
+ <td><code>"NumpadMultiply"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0040</code></th>
+ <td><code>"AltLeft"</code></td>
+ <td><code>"AltLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0041</code></th>
+ <td><code>"Space"</code></td>
+ <td><code>"Space"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0042</code></th>
+ <td><code>"CapsLock"</code></td>
+ <td><code>"CapsLock"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0043</code></th>
+ <td><code>"F1"</code></td>
+ <td><code>"F1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0044</code></th>
+ <td><code>"F2"</code></td>
+ <td><code>"F2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0045</code></th>
+ <td><code>"F3"</code></td>
+ <td><code>"F3"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0046</code></th>
+ <td><code>"F4"</code></td>
+ <td><code>"F4"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0047</code></th>
+ <td><code>"F5"</code></td>
+ <td><code>"F5"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0048</code></th>
+ <td><code>"F6"</code></td>
+ <td><code>"F6"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0049</code></th>
+ <td><code>"F7"</code></td>
+ <td><code>"F7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004A</code></th>
+ <td><code>"F8"</code></td>
+ <td><code>"F8"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004B</code></th>
+ <td><code>"F9"</code></td>
+ <td><code>"F9"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004C</code></th>
+ <td><code>"F10"</code></td>
+ <td><code>"F10"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004D</code></th>
+ <td><code>"NumLock"</code></td>
+ <td><code>"NumLock"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004E</code></th>
+ <td><code>"ScrollLock"</code></td>
+ <td><code>"ScrollLock"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004F</code></th>
+ <td><code>"Numpad7"</code></td>
+ <td><code>"Numpad7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0050</code></th>
+ <td><code>"Numpad8"</code></td>
+ <td><code>"Numpad8"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0051</code></th>
+ <td><code>"Numpad9"</code></td>
+ <td><code>"Numpad9"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0052</code></th>
+ <td><code>"NumpadSubtract"</code></td>
+ <td><code>"NumpadSubtract"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0053</code></th>
+ <td><code>"Numpad4"</code></td>
+ <td><code>"Numpad4"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0054</code></th>
+ <td><code>"Numpad5"</code></td>
+ <td><code>"Numpad5"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0055</code></th>
+ <td><code>"Numpad6"</code></td>
+ <td><code>"Numpad6"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0056</code></th>
+ <td><code>"NumpadAdd"</code></td>
+ <td><code>"NumpadAdd"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0057</code></th>
+ <td><code>"Numpad1"</code></td>
+ <td><code>"Numpad1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0058</code></th>
+ <td><code>"Numpad2"</code></td>
+ <td><code>"Numpad2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0059</code></th>
+ <td><code>"Numpad3"</code></td>
+ <td><code>"Numpad3"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005A</code></th>
+ <td><code>"Numpad0"</code></td>
+ <td><code>"Numpad0"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005B</code></th>
+ <td><code>"NumpadDecimal"</code></td>
+ <td><code>"NumpadDecimal"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005C</code>, <code>0x005D</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005E</code></th>
+ <td><code>"IntlBackslash"</code></td>
+ <td><code>"IntlBackslash"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005F</code></th>
+ <td><code>"F11"</code></td>
+ <td><code>"F11"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0060</code></th>
+ <td><code>"F12"</code></td>
+ <td><code>"F12"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0061</code></th>
+ <td><code>"IntlRo"</code></td>
+ <td><code>"IntlRo"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0062</code>, <code>0x0063</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0064</code></th>
+ <td><code>"Convert"</code></td>
+ <td><code>"Convert"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0065</code></th>
+ <td><code>"KanaMode"</code></td>
+ <td><code>"KanaMode"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0066</code></th>
+ <td><code>"NonConvert"</code></td>
+ <td><code>"NonConvert"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0067</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0068</code></th>
+ <td><code>"NumpadEnter"</code></td>
+ <td><code>"NumpadEnter"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0069</code></th>
+ <td><code>"ControlRight"</code></td>
+ <td><code>"ControlRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006A</code></th>
+ <td><code>"NumpadDivide"</code></td>
+ <td><code>"NumpadDivide"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006B</code></th>
+ <td><code>"PrintScreen"</code></td>
+ <td><code>"PrintScreen"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006C</code></th>
+ <td><code>"AltRight"</code></td>
+ <td><code>"AltRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006D</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006E</code></th>
+ <td><code>"Home"</code></td>
+ <td><code>"Home"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006F</code></th>
+ <td><code>"ArrowUp"</code></td>
+ <td><code>"ArrowUp"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0070</code></th>
+ <td><code>"PageUp"</code></td>
+ <td><code>"PageUp"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0071</code></th>
+ <td><code>"ArrowLeft"</code></td>
+ <td><code>"ArrowLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0072</code></th>
+ <td><code>"ArrowRight"</code></td>
+ <td><code>"ArrowRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0073</code></th>
+ <td><code>"End"</code></td>
+ <td><code>"End"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0074</code></th>
+ <td><code>"ArrowDown"</code></td>
+ <td><code>"ArrowDown"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0075</code></th>
+ <td><code>"PageDown"</code></td>
+ <td><code>"PageDown"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0076</code></th>
+ <td><code>"Insert"</code></td>
+ <td><code>"Insert"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0077</code></th>
+ <td><code>"Delete"</code></td>
+ <td><code>"Delete"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0078</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0079</code></th>
+ <td><code>"AudioVolumeMute"</code> (was <code>"VolumeMute"</code> until Firefox 49)</td>
+ <td><code>"AudioVolumeMute"</code> (was <code>"VolumeMute"</code> until Chrome 50)</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007A</code></th>
+ <td><code>"AudioVolumeDown"</code> (was <code>"VolumeDown"</code> until Firefox 49)</td>
+ <td><code>"AudioVolumeDown"</code> (was <code>"VolumeDown"</code> until Chrome 50)</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007B</code></th>
+ <td><code>"AudioVolumeUp"</code> (was <code>"VolumeUp"</code> until Firefox 49)</td>
+ <td><code>"AudioVolumeUp"</code> (was <code>"VolumeUp"</code> until Chrome 50)</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007C</code></th>
+ <td style="background-color: rgb(204, 255, 255);"><code>"Unidentified"</code></td>
+ <td style="background-color: rgb(204, 255, 255);"><code>"Power"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007D</code></th>
+ <td><code>"NumpadEqual"</code></td>
+ <td><code>"NumpadEqual"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007E</code></th>
+ <td style="background-color: rgb(204, 255, 255);"><code>"Unidentified"</code></td>
+ <td style="background-color: rgb(204, 255, 255);"><code>"NumpadChangeSign"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007F</code></th>
+ <td><code>"Pause"</code></td>
+ <td><code>"Pause"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0080</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0081</code></th>
+ <td><code>"NumpadComma"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0082</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Lang1"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"HangulMode"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0083</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Lang2"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Hanja"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0084</code></th>
+ <td><code>"IntlYen"</code></td>
+ <td><code>"IntlYen"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0085</code></th>
+ <td><code>"OSLeft"</code></td>
+ <td><code>"OSLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0086</code></th>
+ <td><code>"OSRight"</code></td>
+ <td><code>"OSRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0087</code></th>
+ <td><code>"ContextMenu"</code></td>
+ <td><code>"ContextMenu"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0088</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"BrowserStop"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Cancel"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0089</code></th>
+ <td style="background-color: rgb(255, 255, 204);">"Again" {{gecko_minversion_inline("38.0")}}</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x008A</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Props"</code> {{gecko_minversion_inline("38.0")}}</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x008B</code></th>
+ <td><code>"Undo"</code> {{gecko_minversion_inline("38.0")}}</td>
+ <td><code>"Undo"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x008C</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Select"</code> {{gecko_minversion_inline("38.0")}}</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x008D</code></th>
+ <td><code>"Copy"</code> {{gecko_minversion_inline("38.0")}}</td>
+ <td><code>"Copy"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x008E</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Open"</code> {{gecko_minversion_inline("38.0")}}</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x008F</code></th>
+ <td><code>"Paste"</code> {{gecko_minversion_inline("38.0")}}</td>
+ <td><code>"Paste"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0090</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Find"</code> {{gecko_minversion_inline("38.0")}}</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0091</code></th>
+ <td><code>"Cut"</code> {{gecko_minversion_inline("38.0")}}</td>
+ <td><code>"Cut"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0092</code></th>
+ <td><code>"Help"</code></td>
+ <td><code>"Help"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0093</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0094</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"LaunchApp2"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0095</code>, <code>0x0096</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0097</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"WakeUp"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0098</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"LaunchApp1"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0099</code> ~ <code>0x00A2</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A3</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"LaunchMail"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A4</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"BrowserFavorites"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A5</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A6</code></th>
+ <td><code>"BrowserBack"</code></td>
+ <td><code>"BrowserBack"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A7</code></th>
+ <td><code>"BrowserForward"</code></td>
+ <td><code>"BrowserForward"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A8</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A9</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"Eject"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00AA</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00AB</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"MediaTrackNext"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00AC</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"MediaPlayPause"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00AD</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"MediaTrackPrevious"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00AE</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"MediaStop"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00AF</code> ~ <code>0x00B2</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00B3</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"LaunchMediaPlayer"</code> (<code>"MediaSelect"</code> prior to Firefox 49)</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00B4</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"BrowserHome"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00B5</code></th>
+ <td><code>"BrowserRefresh"</code></td>
+ <td><code>"BrowserRefresh"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00B6</code> ~ <code>0x00BA</code></th>
+ <td><code>"Unidentified"</code></td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00BB</code></th>
+ <td style="background-color: rgb(204, 255, 255);">
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(204, 255, 255);"><code>"NumpadParenLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00BC</code></th>
+ <td style="background-color: rgb(204, 255, 255);">
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td style="background-color: rgb(204, 255, 255);"><code>"NumpadParenRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00BD</code>, <code>0x00BE</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00BF</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F13"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C0</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F14"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C1</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F15"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C2</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F16"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C3</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F17"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C4</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F18"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C5</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F19"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C6</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F20"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C7</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F21"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C8</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F22"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C9</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F23"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00CA</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"F24"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00CB ~ 0x00E0</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ <td><code>""</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00E1</code></th>
+ <td style="background-color: rgb(255, 255, 204);"><code>"BrowserSearch"</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>""</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Code_values_on_Android_and_Firefox_OS_(When_scancode_is_available)">Code values on Android and Firefox OS (When scancode is available)</h3>
+
+<p><br>
+  </p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="row">scancode</th>
+ <th scope="col">Gecko {{gecko_minversion_inline("32.0")}}</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row"><code>0x0001</code></th>
+ <td><code>"Escape"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0002</code></th>
+ <td><code>"Digit1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0003</code></th>
+ <td><code>"Digit2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0004</code></th>
+ <td><code>"Digit3"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0005</code></th>
+ <td><code>"Digit4"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0006</code></th>
+ <td><code>"Digit5"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0007</code></th>
+ <td><code>"Digit6"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0008</code></th>
+ <td><code>"Digit7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0009</code></th>
+ <td><code>"Digit8"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000A</code></th>
+ <td><code>"Digit9"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000B</code></th>
+ <td><code>"Digit0"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000C</code></th>
+ <td><code>"Minus"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000D</code></th>
+ <td><code>"Equal"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000E</code></th>
+ <td><code>"Backspace"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x000F</code></th>
+ <td><code>"Tab"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0010</code></th>
+ <td><code>"KeyQ"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0011</code></th>
+ <td><code>"KeyW"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0012</code></th>
+ <td><code>"KeyE"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0013</code></th>
+ <td><code>"KeyR"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0014</code></th>
+ <td><code>"KeyT"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0015</code></th>
+ <td><code>"KeyY"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0016</code></th>
+ <td><code>"KeyU"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0017</code></th>
+ <td><code>"KeyI"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0018</code></th>
+ <td><code>"KeyO"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0019</code></th>
+ <td><code>"KeyP"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001A</code></th>
+ <td><code>"BracketLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001B</code></th>
+ <td><code>"BracketRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001C</code></th>
+ <td><code>"Enter"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001D</code></th>
+ <td><code>"ControlLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001E</code></th>
+ <td><code>"KeyA"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x001F</code></th>
+ <td><code>"KeyS"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0020</code></th>
+ <td><code>"KeyD"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0021</code></th>
+ <td><code>"KeyF"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0022</code></th>
+ <td><code>"KeyG"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0023</code></th>
+ <td><code>"KeyH"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0024</code></th>
+ <td><code>"KeyJ"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0025</code></th>
+ <td><code>"KeyK"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0026</code></th>
+ <td><code>"KeyL"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0027</code></th>
+ <td><code>"Semicolon"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0028</code></th>
+ <td><code>"Quote"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0029</code></th>
+ <td><code>"Backquote"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002A</code></th>
+ <td><code>"ShiftLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002B</code></th>
+ <td><code>"Backslash"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002C</code></th>
+ <td><code>"KeyZ"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002D</code></th>
+ <td><code>"KeyX"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002E</code></th>
+ <td><code>"KeyC"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x002F</code></th>
+ <td><code>"KeyV"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0030</code></th>
+ <td><code>"KeyB"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0031</code></th>
+ <td><code>"KeyN"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0032</code></th>
+ <td><code>"KeyM"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0033</code></th>
+ <td><code>"Comma"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0034</code></th>
+ <td><code>"Period"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0035</code></th>
+ <td><code>"Slash"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0036</code></th>
+ <td><code>"ShiftRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0037</code></th>
+ <td><code>"NumpadMultiply"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0038</code></th>
+ <td><code>"AltLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0039</code></th>
+ <td><code>"Space"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003A</code></th>
+ <td><code>"CapsLock"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003B</code></th>
+ <td><code>"F1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003C</code></th>
+ <td><code>"F2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003D</code></th>
+ <td><code>"F3"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003E</code></th>
+ <td><code>"F4"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x003F</code></th>
+ <td><code>"F5"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0040</code></th>
+ <td><code>"F6"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0041</code></th>
+ <td><code>"F7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0042</code></th>
+ <td><code>"F8"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0043</code></th>
+ <td><code>"F9"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0044</code></th>
+ <td><code>"F10"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0045</code></th>
+ <td><code>"NumLock"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0046</code></th>
+ <td><code>"ScrollLock"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0047</code></th>
+ <td><code>"Numpad7"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0048</code></th>
+ <td><code>"Numpad8"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0049</code></th>
+ <td><code>"Numpad9"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004A</code></th>
+ <td><code>"NumpadSubtract"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004B</code></th>
+ <td><code>"Numpad4"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004C</code></th>
+ <td><code>"Numpad5"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004D</code></th>
+ <td><code>"Numpad6"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004E</code></th>
+ <td><code>"NumpadAdd"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x004F</code></th>
+ <td><code>"Numpad1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0050</code></th>
+ <td><code>"Numpad2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0051</code></th>
+ <td><code>"Numpad3"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0052</code></th>
+ <td><code>"Numpad0"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0053</code></th>
+ <td><code>"NumpadDecimal"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0054</code>, <code>0x0055</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0056</code></th>
+ <td><code>"IntlBackslash"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0057</code></th>
+ <td><code>"F11"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0058</code></th>
+ <td><code>"F12"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0059</code></th>
+ <td><code>"IntlRo"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005A</code>, <code>0x005B</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005C</code></th>
+ <td><code>"Convert"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005D</code></th>
+ <td><code>"KanaMode"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005E</code></th>
+ <td><code>"NonConvert"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x005F</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0060</code></th>
+ <td><code>"NumpadEnter"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0061</code></th>
+ <td><code>"ControlRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0062</code></th>
+ <td><code>"NumpadDivide"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0063</code></th>
+ <td><code>"PrintScreen"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0064</code></th>
+ <td><code>"AltRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0065</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0066</code></th>
+ <td><code>"Home"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0067</code></th>
+ <td><code>"ArrowUp"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0068</code></th>
+ <td><code>"PageUp"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0069</code></th>
+ <td><code>"ArrowLeft"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006A</code></th>
+ <td><code>"ArrowRight"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006B</code></th>
+ <td><code>"End"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006C</code></th>
+ <td><code>"ArrowDown"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006D</code></th>
+ <td><code>"PageDown"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006E</code></th>
+ <td><code>"Insert"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x006F</code></th>
+ <td><code>"Delete"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0070</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0071</code></th>
+ <td>
+ <p><code>"AudioVolumeMute"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is identifi9ed as <code>"VolumeMute"</code>.</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0072</code></th>
+ <td>
+ <p><code>"AudioVolumeDown"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is identifi9ed as <code>"VolumeDown"</code>.</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0073</code></th>
+ <td>
+ <p><code>"AudioVolumeUp"</code></p>
+
+ <p>Prior to Firefox 48, this key code is identifi9ed as <code>"VolumeUp"</code>.</p>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0074</code></th>
+ <td><code>"Power"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0075</code></th>
+ <td><code>"NumpadEqual"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0076</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0077</code></th>
+ <td><code>"Pause"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0078</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0079</code></th>
+ <td><code>"NumpadComma"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007A</code></th>
+ <td><code>"Lang1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007B</code></th>
+ <td><code>"Lang2"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007C</code></th>
+ <td><code>"IntlYen"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007D</code></th>
+ <td>
+ <p><code>"MetaLeft"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>"OSLeft"</code>.</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007E</code></th>
+ <td>
+ <p><code>"MetaRight"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 49, this key code is reported as <code>"MetaRight"</code>.</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x007F</code></th>
+ <td><code>"ContextMenu"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0080</code></th>
+ <td><code>"BrowserStop"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0081</code></th>
+ <td>"Again" {{gecko_minversion_inline("38.0")}}</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0082</code></th>
+ <td><code>"Props"</code> {{gecko_minversion_inline("38.0")}}</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0083</code></th>
+ <td><code>"Undo"</code> {{gecko_minversion_inline("38.0")}}</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0084</code></th>
+ <td><code>"Select"</code> {{gecko_minversion_inline("38.0")}}</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0085</code></th>
+ <td><code>"Copy"</code> {{gecko_minversion_inline("38.0")}}</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0086</code></th>
+ <td><code>"Open"</code> {{gecko_minversion_inline("38.0")}}</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0087</code></th>
+ <td><code>"Paste"</code> {{gecko_minversion_inline("38.0")}}</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0088</code></th>
+ <td><code>"Find"</code> {{gecko_minversion_inline("38.0")}}</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0089</code></th>
+ <td><code>"Cut"</code> {{gecko_minversion_inline("38.0")}}</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x008A</code></th>
+ <td><code>"Help"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x008B</code> ~ <code>0x008D</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x008E</code></th>
+ <td><code>"Sleep"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x008F</code></th>
+ <td><code>"WakeUp"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0090</code></th>
+ <td><code>"LaunchApp1"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x0091</code> ~ <code>0x009B</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x009C</code></th>
+ <td><code>"BrowserFavorites"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x009D</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x009E</code></th>
+ <td><code>"BrowserBack"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x009F</code></th>
+ <td><code>"BrowserForward"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A0</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A1</code></th>
+ <td><code>"Eject"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A2</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A3</code></th>
+ <td><code>"MediaTrackNext"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A4</code></th>
+ <td><code>"MediaPlayPause"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A5</code></th>
+ <td><code>"MediaTrackPrevious"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A6</code></th>
+ <td><code>"MediaStop"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00A7</code> ~ <code>0x00AC</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00AD</code></th>
+ <td><code>"BrowserRefresh"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00AE</code> ~ <code>0x00B6</code></th>
+ <td>"Unidentified" Prior to Firefox 48, this key code is reported as "" (an empty string).</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00B7</code></th>
+ <td><code>"F13"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00B8</code></th>
+ <td><code>"F14"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00B9</code></th>
+ <td><code>"F15"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00BA</code></th>
+ <td><code>"F16"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00BB</code></th>
+ <td><code>"F17"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00BC</code></th>
+ <td><code>"F18"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00BD</code></th>
+ <td><code>"F19"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00BE</code></th>
+ <td><code>"F20"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00BF</code></th>
+ <td><code>"F21"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C0</code></th>
+ <td><code>"F22"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C1</code></th>
+ <td><code>"F23"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C2</code></th>
+ <td><code>"F24"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00C3</code> ~ <code>0x00D8</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00D9</code></th>
+ <td><code>"BrowserSearch"</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x00DA</code> ~ <code>0x01CF</code></th>
+ <td>
+ <p><code>"Unidentified"</code></p>
+
+ <div class="note">
+ <p>Prior to Firefox 48, this key code is reported as <code>""</code> (an empty string).</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><code>0x01D0</code></th>
+ <td><code>"Fn"</code></td>
+ </tr>
+ </tbody>
+</table>
diff --git a/files/zh-cn/web/api/keyboardevent/ctrlkey/index.html b/files/zh-cn/web/api/keyboardevent/ctrlkey/index.html
new file mode 100644
index 0000000000..16d60aa08a
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/ctrlkey/index.html
@@ -0,0 +1,126 @@
+---
+title: KeyboardEvent.ctrlKey
+slug: Web/API/KeyboardEvent/ctrlKey
+tags:
+ - API
+ - DOM
+ - KeyboardEvent
+ - events
+ - 鼠标事件
+translation_of: Web/API/KeyboardEvent/ctrlKey
+---
+<p>{{APIRef("DOM Events")}}</p>
+
+<p><strong><code>KeyboardEvent.ctrlKey</code></strong> 只读属性返回一个 {{jsxref("Boolean")}} 值,表示事件触发时 <kbd>control</kbd> 键是 (<code>true</code>) 否(<code>false</code>)按下。</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">var <em>ctrlKeyPressed</em> = <em>instanceOfKeyboardEvent</em>.ctrlKey
+</pre>
+
+<h3 id="返回值">返回值</h3>
+
+<p>布尔值</p>
+
+<h2 id="Example" name="Example">示例</h2>
+
+<pre class="brush: js">&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;ctrlKey example&lt;/title&gt;
+
+&lt;script type="text/javascript"&gt;
+
+function showChar(e){
+ alert(
+ "Key Pressed: " + String.fromCharCode(e.charCode) + "\n"
+ + "charCode: " + e.charCode + "\n"
+ + "CTRL key pressed: " + e.ctrlKey + "\n"
+ );
+}
+
+&lt;/script&gt;
+&lt;/head&gt;
+
+&lt;body onkeypress="showChar(event);"&gt;
+&lt;p&gt;Press any character key, with or without holding down the CTRL key.&lt;br /&gt;
+You can also use the SHIFT key together with the CTRL key.&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<h2 id="标准">标准</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('DOM3 Events','#widl-KeyboardEvent-ctrlKey','KeyboardEvent.ctrlKey')}}</td>
+ <td>{{Spec2('DOM3 Events')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">浏览器兼容性</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>特性</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Chrome</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>基本支持</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>特性</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>Android</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>基本支持</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">参考</h2>
+
+<ul>
+ <li>{{ domxref("KeyboardEvent") }}</li>
+</ul>
diff --git a/files/zh-cn/web/api/keyboardevent/index.html b/files/zh-cn/web/api/keyboardevent/index.html
new file mode 100644
index 0000000000..1439268d80
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/index.html
@@ -0,0 +1,330 @@
+---
+title: KeyboardEvent
+slug: Web/API/KeyboardEvent
+tags:
+ - API
+ - DOM
+ - Event
+ - JavaScript
+ - KeyboardEvent
+ - 事件
+ - 接口
+ - 键盘
+ - 键盘事件
+translation_of: Web/API/KeyboardEvent
+---
+<p>{{APIRef("DOM Events")}}</p>
+
+<p><strong><code>KeyboardEvent</code></strong> 对象描述了用户与键盘的交互。 每个事件都描述了用户与一个按键(或一个按键和修饰键的组合)的单个交互;事件类型<code>keydown</code>, <code>keypress</code> 与 <code>keyup</code> 用于识别不同的键盘活动类型。</p>
+
+<div class="note"> <strong>注意:</strong><code>KeyboardEvent</code> 只在低级别提示用户与一个键盘按键的交互是什么,不涉及这个交互的上下文含义。 当你需要处理文本输入的时候,使用 {{event("input")}} 事件代替。用户使用其他方式输入文本时,如使用平板电脑的手写系统或绘图板, 键盘事件可能不会触发。</div>
+
+<h2 id="构造函数">构造函数</h2>
+
+<dl>
+ <dt>{{domxref("KeyboardEvent.KeyboardEvent", "KeyboardEvent()")}}</dt>
+ <dd>创建一个 <code>KeyboardEvent</code> 对象。</dd>
+</dl>
+
+<h2 id="常量">常量</h2>
+
+<p><code>KeyboardEvent</code> 接口定义了以下常量。</p>
+
+<h3 id="键盘定位">键盘定位</h3>
+
+<p>下述常量用于识别产生按键事件的键盘位置,以类似 <code>KeyboardEvent.DOM_KEY_LOCATION_STANDARD</code> 的形式来访问。</p>
+
+<table class="standard-table">
+ <caption>键盘定位标识符</caption>
+ <thead>
+ <tr>
+ <th scope="col">常量</th>
+ <th scope="col">值</th>
+ <th scope="col">描述</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>DOM_KEY_LOCATION_STANDARD</code></td>
+ <td>0x00</td>
+ <td>
+ <p>The key described by the event is not identified as being located in a particular area of the keyboard; it is not located on the numeric keypad (unless it's the NumLock key), and for keys that are duplicated on the left and right sides of the keyboard, the key is, for whatever reason, not to be associated with that location.</p>
+
+ <p>Examples include alphanumeric keys on the standard PC 101 US keyboard, the NumLock key, and the space bar.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>DOM_KEY_LOCATION_LEFT</code></td>
+ <td>0x01</td>
+ <td>
+ <p>The key is one which may exist in multiple locations on the keyboard and, in this instance, is on the left side of the keyboard.</p>
+
+ <p>Examples include the left Control key, the left Command key on a Macintosh keyboard, or the left Shift key.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>DOM_KEY_LOCATION_RIGHT</code></td>
+ <td>0x02</td>
+ <td>
+ <p>The key is one which may exist in multiple positions on the keyboard and, in this case, is located on the right side of the keyboard.</p>
+
+ <p>Examples include the right Shift key and the right Alt key (Option on a Mac keyboard).</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>DOM_KEY_LOCATION_NUMPAD</code></td>
+ <td>0x03</td>
+ <td>
+ <p>The key is located on the numeric keypad, or is a virtual key associated with the numeric keypad if there's more than one place the key could originate from. The NumLock key does not fall into this group and is always encoded with the location <code>DOM_KEY_LOCATION_STANDARD</code>.</p>
+
+ <p>Examples include the digits on the numeric keypad, the keypad's Enter key, and the decimal point on the keypad.</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<dl>
+</dl>
+
+<h2 id="属性">属性</h2>
+
+<p><em>此接口从 {{domxref("UIEvent")}} 和 {{domxref("Event")}} 中继承属性。</em></p>
+
+<dl>
+ <dt>{{domxref("KeyboardEvent.altKey")}} {{Readonlyinline}}</dt>
+ <dd>返回一个 {{jsxref("Boolean")}},如果按键事件产生时, <kbd>Alt</kbd> (OS X 中是 <kbd>Option</kbd> 或 <kbd>⌥</kbd> )键被按下,则该值为 <code>true</code> 。</dd>
+ <dt>{{domxref("KeyboardEvent.code")}} {{Readonlyinline}}</dt>
+ <dd>返回一个 {{domxref("DOMString")}},其code值代表触发事件的物理按键。
+ <div class="warning"><strong>警告:</strong>这个属性会忽略用户的键盘布局,所以如果用户在QWERTY布局的键盘上按下“Y”位置(第一行字母按键的中间)的按键时,这个属性会返回“KeyY”,即使用户使用QWERTZ布局的键盘(此时用户输入的就是“Z”,其他属性也会提示“Z”)或Dvorak键盘(此时用户输入的就是“F”)也是如此。</div>
+ </dd>
+ <dt>{{domxref("KeyboardEvent.ctrlKey")}} {{Readonlyinline}}</dt>
+ <dd>返回一个 {{jsxref("Boolean")}},如果按键事件发生时 <kbd>Ctrl</kbd> 键被按下,则该值为 <code>true</code> 。</dd>
+ <dt>{{domxref("KeyboardEvent.isComposing")}} {{Readonlyinline}}</dt>
+ <dd>Returns a {{jsxref("Boolean")}} that is <code>true</code> if the event is fired between after <code>compositionstart</code> and before <code>compositionend</code>.</dd>
+ <dt>{{domxref("KeyboardEvent.key")}} {{Readonlyinline}}</dt>
+ <dd>Returns a {{domxref("DOMString")}} representing the key value of the key represented by the event.</dd>
+ <dt>{{domxref("KeyboardEvent.locale")}} {{Readonlyinline}}</dt>
+ <dd>Returns a {{domxref("DOMString")}} representing a locale string indicating the locale the keyboard is configured for. This may be the empty string if the browser or device doesn't know the keyboard's locale.
+ <div class="note"><strong>Note:</strong> This does not describe the locale of the data being entered. A user may be using one keyboard layout while typing text in a different language.</div>
+ </dd>
+ <dt>{{domxref("KeyboardEvent.location")}} {{Readonlyinline}}</dt>
+ <dd>Returns a {{jsxref("Number")}} representing the location of the key on the keyboard or other input device. A list of the constants identifying the locations is shown above in {{anch("Keyboard locations")}}.</dd>
+ <dt>{{domxref("KeyboardEvent.metaKey")}} {{Readonlyinline}}</dt>
+ <dd>Returns a {{jsxref("Boolean")}} that is <code>true</code> if the <kbd>Meta</kbd> key (on Mac keyboards, the <kbd>⌘ Command</kbd> key; on Windows keyboards, the Windows key (<kbd>⊞</kbd>)) was active when the key event was generated.</dd>
+ <dt>{{domxref("KeyboardEvent.repeat")}} {{Readonlyinline}}</dt>
+ <dd>Returns a {{jsxref("Boolean")}} that is <code>true</code> if the key is being held down such that it is automatically repeating.</dd>
+ <dt>{{domxref("KeyboardEvent.shiftKey")}} {{Readonlyinline}}</dt>
+ <dd>Returns a {{jsxref("Boolean")}} that is <code>true</code> if the <kbd>Shift</kbd> key was active when the key event was generated.</dd>
+</dl>
+
+<h2 id="方法">方法</h2>
+
+<p><em>此接口从 {{domxref("UIEvent")}} 和 {{domxref("Event")}} 中继承方法。</em></p>
+
+<dl>
+ <dt>{{domxref("KeyboardEvent.getModifierState()")}}</dt>
+ <dd>Returns a {{jsxref("Boolean")}} indicating if a modifier key such as <kbd>Alt</kbd>, <kbd>Shift</kbd>, <kbd>Ctrl</kbd>, or <kbd>Meta</kbd>, was pressed when the event was created.</dd>
+</dl>
+
+<h2 id="过时方法">过时方法</h2>
+
+<dl>
+ <dt>{{domxref("KeyboardEvent.initKeyEvent()")}} {{deprecated_inline}}</dt>
+ <dd>Initializes a <code>KeyboardEvent</code> object. This was implemented only by Firefox, and is no longer supported even there; instead, you should use the {{domxref("KeyboardEvent.KeyboardEvent", "KeyboardEvent()")}} constructor.</dd>
+ <dt>{{domxref("KeyboardEvent.initKeyboardEvent()")}} {{deprecated_inline}}</dt>
+ <dd>Initializes a <code>KeyboardEvent</code> object. This is now deprecated. You should instead use the {{domxref("KeyboardEvent.KeyboardEvent", "KeyboardEvent()")}} constructor.</dd>
+</dl>
+
+<h2 id="过时属性">过时属性</h2>
+
+<dl>
+ <dt>{{domxref("KeyboardEvent.char")}} {{Non-standard_inline}}{{Deprecated_inline}}{{Readonlyinline}}</dt>
+ <dd>Returns a {{domxref("DOMString")}} representing the character value of the key. If the key corresponds to a printable character, this value is a non-empty Unicode string containing that character. If the key doesn't have a printable representation, this is an empty string.
+ <div class="note"><strong>Note:</strong> If the key is used as a macro that inserts multiple characters, this attribute's value is the entire string, not just the first character.</div>
+ </dd>
+ <dt>{{domxref("KeyboardEvent.charCode")}} {{Deprecated_inline}}{{Readonlyinline}}</dt>
+ <dd>Returns a {{jsxref("Number")}} representing the Unicode reference number of the key; this attribute is used only by the <code>keypress</code> event. For keys whose <code>char</code> attribute contains multiple characters, this is the Unicode value of the first character in that attribute. In Firefox 26 this returns codes for printable characters.
+ <div class="warning"><strong>Warning:</strong> This attribute is deprecated; you should use {{domxref("KeyboardEvent.key")}} instead, if available.</div>
+ </dd>
+ <dt>{{domxref("KeyboardEvent.keyCode")}} {{deprecated_inline}}{{Readonlyinline}}</dt>
+ <dd>Returns a {{jsxref("Number")}} representing a system and implementation dependent numerical code identifying the unmodified value of the pressed key.
+ <div class="warning"><strong>Warning:</strong> This attribute is deprecated; you should use {{domxref("KeyboardEvent.key")}} instead, if available.</div>
+ </dd>
+ <dt>{{domxref("KeyboardEvent.keyIdentifier")}} {{Non-standard_inline}}{{deprecated_inline}}{{Readonlyinline}}</dt>
+ <dd>This property is non-standard and has been deprecated in favor of {{domxref("KeyboardEvent.key")}}. It was part of an old version of DOM Level 3 Events.</dd>
+ <dt>{{domxref("KeyboardEvent.keyLocation")}} {{Non-standard_inline}}{{deprecated_inline}}{{Readonlyinline}}</dt>
+ <dd>This is a non-standard deprecated alias for {{domxref("KeyboardEvent.location")}}. It was part of an old version of DOM Level 3 Events.</dd>
+ <dt>{{domxref("KeyboardEvent.which")}} {{deprecated_inline}} {{Readonlyinline}}</dt>
+ <dd>Returns a {{jsxref("Number")}} representing a system and implementation dependent numeric code identifying the unmodified value of the pressed key; this is usually the same as <code>keyCode</code>.
+ <div class="warning"><strong>Warning:</strong> This attribute is deprecated; you should use {{domxref("KeyboardEvent.key")}} instead, if available.</div>
+ </dd>
+</dl>
+
+<h2 id="事件">事件</h2>
+
+<p>The following events are based on the <code>KeyboardEvent</code> type. They can be delivered to any object which implements {{domxref("GlobalEventHandlers")}}, including {{domxref("Element")}}, {{domxref("Document")}}, and {{domxref("Window")}}. In the list below, each event links to the documentation for the <code>Document</code> handler for the event, which applies generally to all of the recipients.</p>
+
+<dl>
+ <dt>{{domxref("Document.keydown_event", "keydown")}}</dt>
+ <dd>A key has been pressed.</dd>
+ <dt>{{domxref("Document.keyup_event", "keyup")}}</dt>
+ <dd>A key has been released.</dd>
+</dl>
+
+<h3 id="过时事件">过时事件</h3>
+
+<dl>
+ <dt>{{domxref("Document.keypress_event", "keypress")}} {{obsolete_inline}}</dt>
+ <dd>通常在一个按键被按下时触发,并产生一个字符串值,这个事件高度依赖硬件(highly device-dependent )且废弃,您不应该使用它</dd>
+</dl>
+
+<h2 id="用法说明">用法说明</h2>
+
+<p>There are three types of keyboard events: {{event("keydown")}}, {{event("keypress")}}, and {{event("keyup")}}. For most keys, Gecko dispatches a sequence of key events like this:</p>
+
+<ol>
+ <li>When the key is first pressed, the <code>keydown</code> event is sent.</li>
+ <li>If the key is not a modifier key, the <code>keypress</code> event is sent.</li>
+ <li>When the user releases the key, the <code>keyup</code> event is sent.</li>
+</ol>
+
+<h3 id="特殊情况">特殊情况</h3>
+
+<p>Some keys toggle the state of an indicator light; these include keys such as Caps Lock, Num Lock, and Scroll Lock. On Windows and Linux, these keys dispatch only the <code>keydown</code> and <code>keyup</code> events.</p>
+
+<div class="note">
+<p>On Linux, Firefox 12 and earlier also dispatched the <code>keypress</code> event for these keys.</p>
+</div>
+
+<p>However, a limitation of the macOS event model causes Caps Lock to dispatch only the <code>keydown</code> event. Num Lock was supported on some older laptop models (2007 models and older), but since then, macOS hasn't supported Num Lock even on external keyboards. On older MacBooks with a Num Lock key, that key doesn't generate any key events. Gecko does support the Scroll Lock key if an external keyboard which has an F14 key is connected. In certain older versions of Firefox, this key generated a <code>keypress</code> event; this inconsistent behavior was {{bug(602812)}}.</p>
+
+<h3 id="Auto-repeat_handling">Auto-repeat handling</h3>
+
+<p>When a key is pressed and held down, it begins to auto-repeat. This results in a sequence of events similar to the following being dispatched:</p>
+
+<ol>
+ <li><code>keydown</code></li>
+ <li><code>keypress</code></li>
+ <li><code>keydown</code></li>
+ <li><code>keypress</code></li>
+ <li>&lt;&lt;repeating until the user releases the key&gt;&gt;</li>
+ <li><code>keyup</code></li>
+</ol>
+
+<p>This is what the DOM Level 3 specification says should happen. There are some caveats, however, as described below.</p>
+
+<h4 id="Auto-repeat_on_some_GTK_environments_such_as_Ubuntu_9.4">Auto-repeat on some GTK environments such as Ubuntu 9.4</h4>
+
+<p>In some GTK-based environments, auto-repeat dispatches a native key-up event automatically during auto-repeat, and there's no way for Gecko to know the difference between a repeated series of keypresses and an auto-repeat. On those platforms, then, an auto-repeat key will generate the following sequence of events:</p>
+
+<ol>
+ <li><code>keydown</code></li>
+ <li><code>keypress</code></li>
+ <li><code>keyup</code></li>
+ <li><code>keydown</code></li>
+ <li><code>keypress</code></li>
+ <li><code>keyup</code></li>
+ <li>&lt;&lt;repeating until the user releases the key&gt;&gt;</li>
+ <li><code>keyup</code></li>
+</ol>
+
+<p>In these environments, unfortunately, there's no way for web content to tell the difference between auto-repeating keys and keys that are just being pressed repeatedly.</p>
+
+<h4 id="Auto-repeat_handling_prior_to_Gecko_5.0">Auto-repeat handling prior to Gecko 5.0</h4>
+
+<p>Before Gecko 5.0 {{geckoRelease('5.0')}}, keyboard handling was less consistent across platforms.</p>
+
+<dl>
+ <dt>Windows</dt>
+ <dd>Auto-repeat behavior is the same as in Gecko 4.0 and later.</dd>
+ <dt>Mac</dt>
+ <dd>After the initial keydown event, only keypress events are sent until the keyup event occurs; the inter-spaced keydown events are not sent.</dd>
+ <dt>Linux</dt>
+ <dd>The event behavior depends on the specific platform. It will either behave like Windows or Mac depending on what the native event model does.</dd>
+</dl>
+
+<p class="note"><strong>Note:</strong> Manually firing an event does <em>not</em> generate the default action associated with that event. For example, manually firing a key event does not cause that letter to appear in a focused text input. In the case of UI events, this is important for security reasons, as it prevents scripts from simulating user actions that interact with the browser itself.</p>
+
+<h2 id="示例">示例</h2>
+
+<pre class="brush: js notranslate">&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script&gt;
+'use strict';
+
+document.addEventListener('keydown', (event) =&gt; {
+ const keyName = event.key;
+
+ if (keyName === 'Control') {
+ // do not alert when only Control key is pressed.
+ return;
+ }
+
+ if (event.ctrlKey) {
+    // Even though event.key is not 'Control' (e.g., 'a' is pressed),
+    // event.ctrlKey may be true if Ctrl key is pressed at the same time.
+    alert(`Combination of ctrlKey + ${keyName}`);
+  } else {
+    alert(`Key pressed ${keyName}`);
+  }
+}, false);
+
+document.addEventListener('keyup', (event) =&gt; {
+  const keyName = event.key;
+
+  // As the user releases the Ctrl key, the key is no longer active,
+  // so event.ctrlKey is false.
+  if (keyName === 'Control') {
+    alert('Control key was released');
+  }
+}, false);
+
+&lt;/script&gt;
+&lt;/head&gt;
+
+&lt;body&gt;
+&lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">规范</th>
+ <th scope="col">状态</th>
+ <th scope="col">注释</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('UI Events', '#interface-keyboardevent', 'KeyboardEvent')}}</td>
+ <td>{{Spec2('UI Events')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>The <code>KeyboardEvent</code> interface specification went through numerous draft versions, first under DOM Events Level 2 where it was dropped as no consensus arose, then under DOM Events Level 3. This led to the implementation of non-standard initialization methods, the early DOM Events Level 2 version, {{domxref("KeyboardEvent.initKeyEvent()")}} by Gecko browsers and the early DOM Events Level 3 version, {{domxref("KeyboardEvent.initKeyboardEvent()")}} by others. Both have been superseded by the modern usage of a constructor: {{domxref("KeyboardEvent.KeyboardEvent", "KeyboardEvent()")}}.</p>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+
+
+<p>{{Compat("api.KeyboardEvent")}}</p>
+
+<h3 id="兼容性说明">兼容性说明</h3>
+
+<ul>
+ <li>As of Firefox 65, the <code>keypress</code> event is no longer fired for <a href="/en-US/docs/Web/API/KeyboardEvent/keyCode#Non-printable_keys_(function_keys)">non-printable keys</a> ({{bug(968056)}}), except for the <kbd>Enter</kbd> key, and the <kbd>Shift</kbd> + <kbd>Enter</kbd> and <kbd>Ctrl</kbd> + <kbd>Enter</kbd> key combinations (these were kept for cross-browser compatibility purposes).</li>
+</ul>
+
+<h2 id="参见">参见</h2>
+
+<ul>
+ <li>{{domxref("KeyboardEvent.code")}}.</li>
+ <li>{{domxref("KeyboardEvent.key")}}.</li>
+ <li>{{domxref("KeyboardEvent.getModifierState()")}}</li>
+</ul>
diff --git a/files/zh-cn/web/api/keyboardevent/initkeyevent/index.html b/files/zh-cn/web/api/keyboardevent/initkeyevent/index.html
new file mode 100644
index 0000000000..649f129548
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/initkeyevent/index.html
@@ -0,0 +1,85 @@
+---
+title: KeyboardEvent.initKeyEvent()
+slug: Web/API/KeyboardEvent/initKeyEvent
+tags:
+ - API
+ - DOM
+ - KeyboardEvent
+ - Method
+ - 参考
+translation_of: Web/API/KeyboardEvent/initKeyEvent
+---
+<p> </p>
+
+<p>{{ ApiRef("DOM Events") }}{{non-standard_header}}{{deprecated_header}}</p>
+
+<p>KeyboardEvent.initKeyEvent方法用于初始化使用{{domxref("document.createEvent")}}("KeyboardEvent")创建的事件的值。 以这种方式初始化的事件必须使用{{domxref("document.createEvent")}}("KeyboardEvent")方法创建。 在调度之前,必须调用initKeyEvent来设置事件。</p>
+
+<p><strong>不要再使用这个方法,而是使用{{domxref("KeyboardEvent.KeyboardEvent", "KeyboardEvent()")}}构造函数。</strong><br>
+ 该方法基于{{SpecName("DOM2 Events")}}的早期草案,并在基于Gecko的浏览器中实现; 其他浏览器基于{{SpecName("DOM3 Events")}}的早期草稿实现{{domxref("KeyboardEvent.initKeyboardEvent")}}。 将现代构造函数结构视为构建事件的唯一跨浏览器方式。</p>
+
+<h2 id="Syntax" name="Syntax">Syntax</h2>
+
+<pre><em>event</em>.initKeyEvent (<em>type</em>, <em>bubbles</em>, <em>cancelable</em>, <em>viewArg</em>,
+ <em>ctrlKeyArg</em>, <em>altKeyArg</em>, <em>shiftKeyArg</em>, <em>metaKeyArg</em>,
+ <em>keyCodeArg</em>, <em>charCodeArg</em>)
+</pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><em><code>type</code></em></dt>
+ <dd>是表示事件类型的{{domxref("DOMString")}}。</dd>
+ <dt><em><code>bubbles</code></em></dt>
+ <dd>是{{jsxref("Boolean")}}指示事件是否应该通过事件链冒泡(请参阅冒泡)。</dd>
+ <dt><em><code>cancelable</code></em></dt>
+ <dd>是{{jsxref("Boolean")}}我指出事件是否可以被取消(见可取消)。</dd>
+ <dt><em><code>viewArg</code></em></dt>
+ <dd>指定{{domxref("UIEvent.view")}}; 此值可能为空。</dd>
+ <dt><em><code>ctrlKeyArg</code></em></dt>
+ <dd>如果要生成的虚拟键是包含<kbd>Ctrl</kbd>键的键的组合,则为{{jsxref("Boolean")}}</dd>
+ <dt><em><code>altKeyArg</code></em></dt>
+ <dd><em><code>如果要生成的虚拟键是包含</code></em><kbd>Alt</kbd><em><code>键的键的组合,则为{{jsxref("Boolean")}}。</code></em></dd>
+ <dt><em><code>shiftKeyArg</code></em></dt>
+ <dd>A {{jsxref("Boolean")}}如果要生成的虚拟键是包含<kbd>Shift</kbd>键的键组合,则返回true。</dd>
+ <dt><em><code>metaKeyArg</code></em></dt>
+ <dd><em><code>是{{jsxref("Boolean")}}如果要生成的虚拟键是包含</code></em><kbd>Meta</kbd><em><code>键的键的组合,则为true。</code></em></dd>
+ <dt><em><code>keyCodeArg</code></em></dt>
+ <dd>是一个无符号长整型,表示被按下的键的虚拟键码值,否则为0.请参阅{{domxref("KeyboardEvent.keyCode")}}以获取键码列表。</dd>
+ <dt><em><code>charCodeArg</code></em></dt>
+ <dd>是一个无符号长整型,表示与按下的键相关的Unicode字符,否则为0。</dd>
+</dl>
+
+<h2 id="Example" name="Example">Example</h2>
+
+<pre>var event = document.createEvent('KeyboardEvent'); // create a key event
+// define the event
+event.initKeyEvent("keypress", // typeArg,
+ true, // canBubbleArg,
+ true, // cancelableArg,
+ null, // viewArg, Specifies UIEvent.view. This value may be null.
+ false, // ctrlKeyArg,
+ false, // altKeyArg,
+ false, // shiftKeyArg,
+ false, // metaKeyArg,
+ 9, // keyCodeArg,
+ 0); // charCodeArg);
+
+document.getElementById('blah').dispatchEvent(event);
+</pre>
+
+<h2 id="Specification" name="Specification">Specification</h2>
+
+<p>键盘事件的这种实现基于DOM 2事件早期版本中的关键事件规范,后来从该规范中删除。</p>
+
+<p>initKeyEvent是DOM Level 3事件的当前Gecko等价物(最初起草并且不推荐使用{{domxref("KeyboardEvent.KeyboardEvent", "KeyboardEvent()")}} {{domxref("Keyboard.initKeyboardEvent()")}}方法与以下参数:</p>
+
+<pre>typeArg of type DOMString
+canBubbleArg of type boolean
+cancelableArg of type boolean
+viewArg of type views::AbstractView
+keyIdentifierArg of type DOMString
+keyLocationArg of type unsigned long
+modifiersList of type DOMString);</pre>
+
+<p> </p>
diff --git a/files/zh-cn/web/api/keyboardevent/iscomposing/index.html b/files/zh-cn/web/api/keyboardevent/iscomposing/index.html
new file mode 100644
index 0000000000..a265d70461
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/iscomposing/index.html
@@ -0,0 +1,102 @@
+---
+title: KeyboardEvent.isComposing
+slug: Web/API/KeyboardEvent/isComposing
+tags:
+ - API
+ - DOM
+ - KeyboardEvent
+ - events
+ - 键盘事件
+translation_of: Web/API/KeyboardEvent/isComposing
+---
+<p>{{APIRef("DOM Events")}}</p>
+
+<p><code><strong>KeyboardEvent.isComposing</strong></code> 只读属性,返回一个 {{jsxref("Boolean")}} 值,表示该事件是否在 {{event("compositionstart")}} 之后和 {{event("compositionend")}} 之前被触发。</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">var <em>bool</em> = <em>event</em>.isComposing;</pre>
+
+<h2 id="示例">示例</h2>
+
+<pre class="brush: js">var kbdEvent = new KeyboardEvent("syntheticKey", false);
+console.log(kbdEvent.isComposing); // return false
+</pre>
+
+<h2 id="Specifications" name="Specifications">标准</h2>
+
+<table class="standard-table" style="height: 49px; width: 1000px;">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('DOM3 Events','#widl-KeyboardEvent-isComposing','KeyboardEvent.isComposing')}}</td>
+ <td>{{Spec2('DOM3 Events')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>特性</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>基本支持</td>
+ <td>{{ CompatChrome(56.0) }}</td>
+ <td>{{ CompatGeckoDesktop("31.0") }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatOpera(43) }}</td>
+ <td>{{ CompatNo() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>特性</th>
+ <th>Android Webview</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>基本支持</td>
+ <td>{{ CompatChrome(56.0) }}</td>
+ <td>{{ CompatGeckoMobile("31.0") }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatOperaMobile(43) }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatChrome(56.0) }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 class="note" id="参考">参考</h2>
+
+<ul>
+ <li>{{ event("compositionstart") }} 与 {{ event("compositionend")}}</li>
+ <li>{{domxref("KeyboardEvent")}}</li>
+</ul>
diff --git a/files/zh-cn/web/api/keyboardevent/key/index.html b/files/zh-cn/web/api/keyboardevent/key/index.html
new file mode 100644
index 0000000000..617cc4f7b9
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/key/index.html
@@ -0,0 +1,292 @@
+---
+title: KeyboardEvent.key
+slug: Web/API/KeyboardEvent/key
+tags:
+ - 参考
+ - 只读属性
+ - 属性
+ - 键盘事件
+translation_of: Web/API/KeyboardEvent/key
+---
+<p>{{APIRef("DOM Events")}}</p>
+
+<p><span class="seoSummary">只读属性 <strong><code>KeyboardEvent.key</code></strong> 返回用户按下的物理按键的值。它还与 <code>shiftKey</code> 等调节性按键的状态和键盘的区域 / 和布局有关。</span>它的值由以下因素决定:</p>
+
+<div class="pull-aside">
+<p class="moreinfo">查看 <a href="/docs/Web/API/KeyboardEvent/key/Key_Values">所有键值列表</a></p>
+</div>
+
+<ul>
+ <li>如果按下的键拥有可打印的内容,则返回一个非空的 Unicode 字符来代表这个键的可打印内容。</li>
+ <li>如果按下的键是一个控制键或特殊字符,则返回一个事先定义好的值,见<a href="/zh-CN/docs/Web/API/KeyboardEvent/key/Key_Values">预定义键值列表</a>。</li>
+ <li>如果 <code>KeyboardEvent</code> 显示按下的键是一个死键(dead key),则键值为 <code>"Dead"</code>。</li>
+ <li>有些特殊键盘的键(比如多媒体键盘上用来控制媒体播放的扩展按键)在 Windows 下会触发 <code>WM_APPCOMMAND</code> 事件,而不会产生按键代码。虽然没有按键代码,这些事件将映射到 DOM 键盘事件中,并将列入 Windows 的“虚拟按键码”列表中。</li>
+ <li>如果按键无法识别,则返回 <code>"Unidentified"</code>。</li>
+</ul>
+
+<h2 id="KeyboardEvent_次序">KeyboardEvent 次序</h2>
+
+<p><code>KeyboardEvent</code> 事件以一个预设的次序触发,理解这一点对于理解特定 <code>KeyboardEvent</code> 的 <code>key</code> 属性值大有帮助。对于一个给定的按键操作,<code>KeyboardEvent</code> 将假定 {{domxref("Event.preventDefault")}} 未调用并按下面次序触发:</p>
+
+<ol>
+ <li>首先触发 {{event("keydown")}} 事件。如果按键长按且生成一个字符,则事件将以一个与平台实现方式相关的时间间隔持续发出,同时将只读属性 {{domxref("KeyboardEvent.repeat")}} 设定为 <code>true</code>。</li>
+ <li>如果按键生成的字符即将插入某个 {{HTMLElement("input")}}、{{HTMLElement("textarea")}} 或其它某个 {{domxref("HTMLElement.contentEditable")}} 设为 true 的元素,则依次触发 {{event("beforeinput")}}、{{event("input")}}事件。注意某些实现中若支持 {{event("keypress")}} 事件则可能将其触发。当按键长按时重复触发。</li>
+ <li>当按键松开时触发 {{event("keyup")}} 事件。操作结束。</li>
+</ol>
+
+<p>在次序1、3中,<code>KeyboardEvent.key</code> 属性按照事先定义的规则设定为恰当的值。</p>
+
+<h2 id="KeyboardEvent_次序示例">KeyboardEvent 次序示例</h2>
+
+<p>考虑使用美国或英国键盘布局生成的点击 <code>shiftKey</code> 和一个未知的 <code>key 2</code> 时的事件次序。</p>
+
+<p>请检测以下两个测试用例:</p>
+
+<ol>
+ <li>按下并长按 <code>shift</code> 键,然后按下 <code>key 2</code> 并松开。下一步,松开 <code>shift</code> 键。</li>
+ <li>按下并长按 <code>shift</code> 键,然后按下并长按 <code>key 2</code>。然后松开 shift 键,最后松开 <code>key 2</code>。</li>
+</ol>
+
+<h3 id="HTML">HTML</h3>
+
+<pre class="brush: html">&lt;div class="flex flex-left"&gt;
+    &lt;textarea rows="5" id="test-target"&gt;&lt;/textarea&gt;
+    &lt;button id="btn-clear-console"&gt;清空控制台&lt;/button&gt;
+&lt;/div&gt;
+&lt;div class="flex flex-right"&gt;
+    &lt;div id="console-log"&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;script src="main.js"&gt;&lt;/script&gt;</pre>
+
+<h3 id="CSS">CSS</h3>
+
+<pre class="brush: css">body {
+ -webkit-display: flex;
+ display: flex;
+}
+
+.flex {
+ padding-left: 20px;
+ padding-right: 20px;
+}
+
+.flex-left {
+ flex: 1;
+ flex-grow: 1;
+ -webkit-flex: 1;
+ -webkit-flex-grow: 1;
+}
+
+.flex-right {
+ flex: 2;
+ flex-grow: 2;
+ -webkit-flex: 2;
+ -webkit-flex-grow: 2;
+}
+
+#test-target {
+ display: block;
+ width: 100%;
+ margin-bottom: 10px;
+ resize: none;
+}
+
+#console-log {
+ overflow: auto;
+}</pre>
+
+<h3 id="JavaScript">JavaScript</h3>
+
+<pre class="brush: js">let textarea = document.getElementById('test-target'),
+consoleLog = document.getElementById('console-log'),
+btnClearConsole = document.getElementById('btn-clear-console');
+
+function logMessage(message) {
+  let p = document.createElement('p');
+  p.appendChild(document.createTextNode(message));
+  consoleLog.appendChild(p);
+}
+
+textarea.addEventListener('keydown', (e) =&gt; {
+  if (!e.repeat)
+    logMessage(`第一个 keydown 事件。key 属性的值为"${e.key}"`);
+  else
+    logMessage(`keydown 事件重复。key 属性的值为"${e.key}"`);
+});
+
+textarea.addEventListener('beforeinput', (e) =&gt; {
+  logMessage(`beforeinput 事件。你准备输入"${e.data}"`);
+});
+
+textarea.addEventListener('input', (e) =&gt; {
+  logMessage(`input 事件。你刚刚输入了"${e.data}"`);
+});
+
+textarea.addEventListener('keyup', (e) =&gt; {
+  logMessage(`keyup 事件。key 属性的值为"${e.key}"`);
+});
+
+btnClearConsole.addEventListener('click', (e) =&gt; {
+  let child = consoleLog.firstChild;
+  while (child) {
+   consoleLog.removeChild(child);
+   child = consoleLog.firstChild;
+  }
+});</pre>
+
+<h3 id="运行结果">运行结果</h3>
+
+<div class="hidden">
+<h6 id="Key">Key</h6>
+
+<pre class="brush: html">&lt;!DOCTYPE html&gt;
+&lt;html lang="zh-CN"&gt;
+&lt;head&gt;
+ &lt;meta charset="UTF-8"&gt;
+ &lt;style&gt;
+ body { -webkit-display: flex; display: flex; }
+ .flex { padding-left: 20px; padding-right: 20px; }
+ .flex-left { flex: 1; flex-grow: 1; -webkit-flex: 1; -webkit-flex-grow: 1; }
+ .flex-right { flex: 2; flex-grow: 2; -webkit-flex: 2; -webkit-flex-grow: 2; }
+ #test-target { display: block; width: 100%; margin-bottom: 10px; resize: none; }
+ #console-log { overflow: auto; }
+ &lt;/style&gt;
+ &lt;title&gt;KeyboardEvent.key&lt;/title&gt;
+&lt;/head&gt;
+
+&lt;body&gt;
+ &lt;div class="flex flex-left"&gt;
+ &lt;textarea rows="5" id="test-target"&gt;&lt;/textarea&gt;
+ &lt;button id="btn-clear-console"&gt;清空控制台&lt;/button&gt;
+ &lt;/div&gt;
+ &lt;div class="flex flex-right"&gt;
+ &lt;div id="console-log"&gt;&lt;/div&gt;
+ &lt;/div&gt;
+ &lt;script&gt;
+ let textarea = document.getElementById('test-target'),
+ consoleLog = document.getElementById('console-log'),
+ btnClearConsole = document.getElementById('btn-clear-console');
+
+ function logMessage(message) {
+ let p = document.createElement('p');
+ p.appendChild(document.createTextNode(message));
+ consoleLog.appendChild(p);
+ }
+
+ textarea.addEventListener('keydown', (e) =&gt; {
+ if (!e.repeat)
+ logMessage(`第一个 keydown 事件。key 属性的值为"${e.key}"`);
+ else
+ logMessage(`keydown 事件重复。key 属性的值为"${e.key}"`);
+ });
+
+ textarea.addEventListener('beforeinput', (e) =&gt; {
+ logMessage(`beforeinput 事件。你准备输入"${e.data}"`);
+ });
+
+ textarea.addEventListener('input', (e) =&gt; {
+ logMessage(`input 事件。你刚刚输入了"${e.data}"`);
+ });
+
+ textarea.addEventListener('keyup', (e) =&gt; {
+ logMessage(`keyup 事件。key 属性的值为"${e.key}"`);
+ });
+
+
+ btnClearConsole.addEventListener('click', (e) =&gt; {
+ let child = consoleLog.firstChild;
+ while (child) {
+ consoleLog.removeChild(child);
+ child = consoleLog.firstChild;
+ }
+ });
+ &lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;</pre>
+</div>
+
+<p>{{ EmbedLiveSample('Key', '100%', 480, "", "", "hide-codepen-jsfiddle") }}</p>
+
+<h3 id="用例_1">用例 1</h3>
+
+<p>当按下 shift 键时,首先触发 {{event("keydown")}} 事件,然后将 <code>key</code> 属性的值设为 <code>"Shift"</code> 字符串。如果继续长按 shift 键,由于不会生成字符按键值,{{event("keydown")}} 事件不会继续重复触发。</p>
+
+<p>当按下 <code>key 2</code> 时,另一个 {{event("keydown")}} 事件将会为这个新的按键动作触发,若使用的是美式键盘,它的 <code>key</code> 属性将被设为 <code>"@"</code> 字符,若为英式键盘,则会设为 <code>"""</code> 字符。这是因为 <code>key</code> 属性 <code>"shift"</code> 处于激活状态。由于生成了一个字符的按键值,{{event("beforeinput")}} 和 {{event("input")}} 事件随后触发。</p>
+
+<p>松开 <code>key 2</code> 时,{{event("keyup")}} 事件将触发,<code>key</code> 属性将会为不同键盘布局设定合适的字符值,比如 <code>"@"</code>、<code>"""</code>。</p>
+
+<p>最后在松开 shift 键时,另一个 {{event("keyup")}} 事件触发,<code>key</code> 值将保持 <code>"Shift"</code> 不变。</p>
+
+<h3 id="用例_2">用例 2</h3>
+
+<p>当按下 shift 键时,首先触发 {{event("keydown")}} 事件,然后将 <code>key</code> 属性的值设为 <code>"Shift"</code> 字符串。如果继续长按 shift 键,由于不会生成字符按键值,{{event("keydown")}} 事件不会继续重复触发。</p>
+
+<p>当按下 <code>key 2</code> 时,另一个 {{event("keydown")}} 事件将会为这个新的按键动作触发,若使用的是美式键盘,它的 <code>key</code> 属性将被设为 <code>"@"</code> 字符,若为英式键盘,则会设为 <code>"""</code> 字符。这是因上档键处于激活状态。由于生成了一个字符的按键值,{{event("beforeinput")}} 和 {{event("input")}} 事件随后触发。如果继续长按 <code>2</code> 键,则 {{event("keydown")}} 事件将持续重复触发,同时将 {{domxref("KeyboardEvent.repeat")}} 属性设置为 <code>true</code>。{{event("beforeinput")}} 和 {{event("input")}} 事件也将持续重复触发。</p>
+
+<p>当松开 shift 键时,{{event("keyup")}} 事件随之触发,且 <code>key</code> 属性保留为 <code>"Shift"</code>。此时请注意为  <code>key 2</code> 长按触发的重复 <code>keydown</code> 事件的 <code>key</code> 值会变成 <code>"2"</code>,因为上档键不再处于激活状态。{{event("beforeinput")}} 与 {{event("input")}} 事件的 {{domxref("InputEvent.data")}} 属性同理。</p>
+
+<p>最终 <code>key 2</code> 松开,{{event("keyup")}} 事件触发,但两种键盘布局的 <code>key</code> 属性均为 <code>"2"</code>。就是因为没有激活上档键。</p>
+
+
+
+<h2 id="示例"><font face="x-locale-heading-primary, zillaslab, Palatino, Palatino Linotype, x-locale-heading-secondary, serif"><span style="font-size: 37.33327865600586px;"><strong>示例</strong></span></font></h2>
+
+<p>这个示例使用 {{domxref("EventTarget.addEventListener()")}} 监听 {{event("keydown")}} 事件。当我们事件触发时,将检测按键的值是否为代码所关注,如果是,就进行某项操作。(可能是给飞船转向,或者是调整电子表格中选中单元格的位置。)</p>
+
+<pre class="brush: js">window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return; // 如果事件已经在进行中,则不做任何事。
+ }
+
+ switch (event.key) {
+ case "ArrowUp":
+ // 按“↑”方向键时要做的事。
+ break;
+ case "ArrowDown":
+ // 按“↓”方向键时要做的事。
+ break;
+ case "ArrowLeft":
+ // 按“←”方向键时要做的事。
+ break;
+ case "ArrowRight":
+ // 按“→”方向键时要做的事。
+ break;
+ case "Enter":
+ // 按“回车”键时要做的事。
+ break;
+ case "Escape":
+ // 按“ESC”键时要做的事。
+ break;
+ default:
+ return; // 什么都没按就退出吧。
+ }
+
+ // 取消默认动作,从而避免处理两次。
+ event.preventDefault();
+}, true);
+</pre>
+
+<p><font face="x-locale-heading-primary, zillaslab, Palatino, Palatino Linotype, x-locale-heading-secondary, serif"><span style="font-size: 37.33327865600586px;"><strong>标准</strong></span></font></p>
+
+
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">标准</th>
+ <th scope="col">状态</th>
+ <th scope="col">备注</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('DOM3 Events', '#widl-KeyboardEvent-key', 'KeyboardEvent.key')}}</td>
+ <td>{{Spec2('DOM3 Events')}}</td>
+ <td>初次定义,包括按键的值。</td>
+ </tr>
+ </tbody>
+</table>
+
+
+
+<h2 id="兼容性">兼容性</h2>
+
+<p>{{Compat("api.KeyboardEvent.key")}}</p>
diff --git a/files/zh-cn/web/api/keyboardevent/key/key_values/index.html b/files/zh-cn/web/api/keyboardevent/key/key_values/index.html
new file mode 100644
index 0000000000..159f96c074
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/key/key_values/index.html
@@ -0,0 +1,3638 @@
+---
+title: Key Values
+slug: Web/API/KeyboardEvent/key/Key_Values
+translation_of: Web/API/KeyboardEvent/key/Key_Values
+---
+<p>下列表格列出了不同范畴的键的标准键值,以及这些键的一般作用。对应的,通用平台上可用的虚拟键码也包含其中。</p>
+
+<div class="pull-aside">
+<div class="moreinfo">Learn how to use these key values in JavaScript using <a href="/docs/Web/API/KeyboardEvent/key">KeyboardEvent.key</a></div>
+</div>
+
+<p><a href="#Special_values">Special Values </a>| <a href="#Modifier_keys">Modifier Keys</a> | <a href="#Whitespace_keys">Whitespace Keys</a> | <a href="#Navigation_keys">Navigation Keys</a> | <a href="#Editing_keys">Editing Keys</a> | <a href="#UI_keys">UI Keys</a> | <a href="#Device_keys">Device Keys</a> | <a href="#IME_and_composition_keys">IME and Composition Keys</a> | <a href="#Function_keys">Function Keys</a> | <a href="#Phone_keys">Phone Keys</a> | <a href="#Multimedia_keys">Multimedia Keys</a> | <a href="#Audio_control_keys">Audio Control Keys</a> | <a href="#TV_control_keys">TV Control Keys</a> | <a href="#Media_controller_keys">Media Controller Keys</a> | <a href="#Speech_recognition_keys">Speech Recognition Keys</a> | <a href="#Document_keys">Document Keys</a> | <a href="#Application_selector_keys">Application Selector Keys</a> | <a href="#Browser_control_keys">Browser Control Keys</a> | <a href="#Numeric_keypad_keys">Numeric Keypad Keys</a></p>
+
+<h2 id="Special_values">Special values</h2>
+
+<p>键的值,具有除标识特定键或字符外的特殊含义。</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>"Unidentified"</code></td>
+ <td>用户代理无法将事件的虚拟键码映射到特定键值。 这可能由于硬件或软件限制或由于运行用户代理的平台周围的约束而发生。</td>
+ <td><em>varies</em></td>
+ <td><em>varies</em></td>
+ <td><em>varies</em></td>
+ <td><em>varies</em></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Modifier_keys">Modifier keys</h2>
+
+<p>修饰符是特殊键,用于生成特殊字符或与其他键组合使用时产生特殊操作。 示例包括<kbd>Shift</kbd>和<kbd>Control</kbd>键,以及<kbd>Lock Lock</kbd>和<kbd>NumLock</kbd>等锁定键。</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"Alt"</code> [5]</td>
+ <td> <kbd>Alt</kbd> (替代)键。</td>
+ <td><code>VK_MENU</code> (0x12)<br>
+ <code>VK_LMENU</code> (0xA4)<br>
+ <code>VK_RMENU</code> (0xA5)</td>
+ <td><code>kVK_Option</code> (0x3A)<br>
+ <code>kVK_RightOption</code> (0x3D)</td>
+ <td><code>GDK_KEY_Alt_L</code> (0xFFE9)<br>
+ <code>GDK_KEY_Alt_R</code> (0xFFEA)<br>
+ <code>Qt::Key_Alt</code> (0x01000023)</td>
+ <td><code>KEYCODE_ALT_LEFT</code> (57)<br>
+ <code>KEYCODE_ALT_RIGHT</code> (58)</td>
+ </tr>
+ <tr>
+ <td><code>"AltGraph"</code> [5]</td>
+ <td><kbd>AltGr</kbd>或<kbd>AltGraph</kbd>(Alternate Graphics)键。 启用ISO Level 3移位修改器(其中<kbd>Shift</kbd>是2级修改器)。</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Mode_switch</code> (0xFF7E)<br>
+ <code>GDK_KEY_ISO_Level3_Shift</code> (0xFE03)<br>
+ <code>GDK_KEY_ISO_Level3_Latch</code> (0xFE04)<br>
+ <code>GDK_KEY_ISO_Level3_Lock</code> (0xFE05)<br>
+ <code>GDK_KEY_ISO_Level5_Shift</code> (0xFE11)<br>
+ <code>GDK_KEY_ISO_Level5_Latch</code> (0xFE12)<br>
+ <code>GDK_KEY_ISO_Level5_Lock</code> (0xFE13)<br>
+ <code>Qt::Key_AltGr</code> (0x01001103<br>
+ <code>Qt::Key_Mode_switch</code> (0x0100117E)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"CapsLock"</code></td>
+ <td>大写锁定键。 打开和关闭大写字符锁以进行后续输入。</td>
+ <td><code>VK_CAPITAL</code> (0x14)</td>
+ <td><code>kVK_CapsLock</code> (0x39)</td>
+ <td><code>GDK_KEY_Caps_Lock</code> (0xFFE5)<br>
+ <code>Qt::Key_CapsLock</code> (0x01000024)</td>
+ <td><code>KEYCODE_CAPS_LOCK</code> (115)</td>
+ </tr>
+ <tr>
+ <td><code>"Control"</code></td>
+ <td><kbd>Control</kbd>,<kbd>Ctrl</kbd>或<kbd>Ctrl</kbd>键。 允许输入控制字符。</td>
+ <td><code>VK_CONTROL</code> (0x11)<br>
+ <code>VK_LCONTROL</code> (0xA2)<br>
+ <code>VK_RCONTROL</code> (0xA3)</td>
+ <td><code>kVK_Control</code> (0x3B)<br>
+ <code>kVK_RightControl</code> (0x3E)</td>
+ <td><code>GDK_KEY_Control_L</code> (0xFFE3)<br>
+ <code>GDK_KEY_Control_R</code> (0xFFE4)<br>
+ <code>Qt::Key_Control</code> (0x01000021)</td>
+ <td><code>KEYCODE_CTRL_LEFT</code> (113)<br>
+ <code>KEYCODE_CTRL_RIGHT</code> (114)</td>
+ </tr>
+ <tr>
+ <td><code>"Fn"</code></td>
+ <td><kbd>Fn</kbd>(函数修饰符)键。 用于允许在没有专用功能键区域的键盘上生成功能键(例如<kbd>F1</kbd>-<kbd>F15</kbd>)字符。 通常在硬件中处理,以便不为此密钥生成事件。</td>
+ <td></td>
+ <td><code>kVK_Function</code> (0x3F)</td>
+ <td></td>
+ <td><code>KEYCODE_FUNCTION</code> (119)</td>
+ </tr>
+ <tr>
+ <td><code>"FnLock"</code></td>
+ <td><kbd>FnLock</kbd>或<kbd>F-Lock</kbd>(功能锁定)键。打开和关闭“<kbd>Fn</kbd>”描述的功能键模式。 通常在硬件中处理,以便不为此密钥生成事件。</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Hyper"</code> [4]</td>
+ <td> <kbd>Hyper</kbd> 键.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Hyper_L</code> (0xFFED)<br>
+ <code>GDK_KEY_Hyper_R</code> (0xFFEE)<br>
+ <code>Qt::Key_Hyper_L</code> (0x01000056)<br>
+ <code>Qt::Key_Hyper_R</code> (0x01000057)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Meta"</code> [1]</td>
+ <td><kbd>Meta</kbd>键。 允许发出特殊命令输入。 这是<kbd>Windows</kbd>徽标键,或<kbd>Mac</kbd>键盘上的<kbd>Command</kbd>或⌘键。</td>
+ <td><code>VK_LWIN</code> (0x5B)<br>
+ <code>VK_RWIN</code> (0x5C)</td>
+ <td><code>kVK_Command</code> (0x37)<br>
+ <code>kVK_RightCommand</code> (0x36)</td>
+ <td><code>GDK_KEY_Meta_L</code> (0xFFE7)<br>
+ <code>GDK_KEY_Meta_R</code> (0xFFE8)<br>
+ <code>Qt::Key_Meta</code> (0x01000022)</td>
+ <td><code>KEYCODE_META_LEFT</code> (117)<br>
+ <code>KEYCODE_META_RIGHT</code> (118)</td>
+ </tr>
+ <tr>
+ <td><code>"NumLock"</code></td>
+ <td>The <kbd>NumLock</kbd> (Number Lock) key. Toggles the numeric keypad between number entry some other mode (often directional arrows).</td>
+ <td><code>VK_NUMLOCK</code> (0x90)</td>
+ <td></td>
+ <td><code>GDK_KEY_Num_Lock</code> (0xFF7F)<br>
+ <code>Qt::Key_NumLock</code> (0x01000025)</td>
+ <td><code>KEYCODE_NUM_LOCK</code> (143)</td>
+ </tr>
+ <tr>
+ <td><code>"ScrollLock"</code> [2]</td>
+ <td>The <kbd>Scroll Lock</kbd> key. Toggles beteen scrolling and cursor movement modes.</td>
+ <td><code>VK_SCROLL</code> (0x91)</td>
+ <td></td>
+ <td><code>GDK_KEY_Scroll_Lock</code> (0xFF14)<br>
+ <code>Qt::Key_ScrollLock</code> (0x01000026)</td>
+ <td><code>KEYCODE_SCROLL_LOCK</code> (116)</td>
+ </tr>
+ <tr>
+ <td><code>"Shift"</code></td>
+ <td>The <kbd>Shift</kbd> key. Modifies keystrokes to allow typing upper (or other) case letters, and to support typing punctuation and other special characters.</td>
+ <td><code>VK_SHIFT</code> (0x10)<br>
+ <code>VK_LSHIFT</code> (0xA0)<br>
+ <code>VK_RSHIFT</code> (0xA1)</td>
+ <td><code>kVK_Shift</code> (0x38)<br>
+ <code>kVK_RightShift</code> (0x3C)</td>
+ <td><code>GDK_KEY_Shift_L</code> (0xFFE1)<br>
+ <code>GDK_KEY_Shift_R</code> (0xFFE2)<br>
+ <code>Qt::Key_Shift</code> (0x01000020)</td>
+ <td><code>KEYCODE_SHIFT_LEFT</code> (59)<br>
+ <code>KEYCODE_SHIFT_RIGHT</code> (60)</td>
+ </tr>
+ <tr>
+ <td><code>"Super"</code> [4]</td>
+ <td>The <kbd>Super</kbd> key.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Super_L</code> (0xFFEB)<br>
+ <code>GDK_KEY_Super_R</code> (0xFFEC)<br>
+ <code>Qt::Key_Super_L</code> (0x01000053)<br>
+ <code>Qt::Key_Super_R</code> (0x01000054)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Symbol"</code></td>
+ <td>The <kbd>Symbol</kbd> modifier key (found on certain virtual keyboards).</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_SYM</code> (63) [3]</td>
+ </tr>
+ <tr>
+ <td><code>"SymbolLock"</code></td>
+ <td>The <kbd>Symbol Lock</kbd> key.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] In Internet Explorer 9, as well as in all versions of Firefox, the <kbd>Windows</kbd> key is reported as <code>"OS"</code> instead of as <code>"Meta"</code>. This will be changed in Firefox per {{bug(1232918)}}. Until that's fixed, these keys are returned as <code>"OS"</code> by Firefox: <code>VK_LWIN</code> (0x5B) and <code>VK_RWIN</code> (0x5C) on Windows, and <code><code>GDK_KEY_Super_L</code> (0xFFEB)</code>, <code><code>GDK_KEY_Super_R</code> (0xFFEC)</code>, <code><code>GDK_KEY_Hyper_L</code> (0xFFED)</code>, and <code><code>GDK_KEY_Hyper_R</code> (0xFFEE)</code> on Linux.</p>
+
+<p>[2] Internet Explorer 9 reports <code>"Scroll"</code> instead of <code>"ScrollLock"</code> for the <kbd>Scroll Lock</kbd> key.</p>
+
+<p>[3] Firefox did not add support for the <kbd>Symbol</kbd> key until Firefox 37.</p>
+
+<p>[4] Firefox generates the key value <code>"OS</code>" for the <kbd>Super</kbd> and <kbd>Hyper</kbd> keys, instead of <code>"Super"</code> and <code>"Hyper"</code>.</p>
+
+<p>[5] Chrome 67 and Firefox 63 now correctly interpret the right <kbd>Alt</kbd> key for keyboard layouts which map that key to <kbd>AltGr</kbd>. See Firefox bug {{bug(900750)}} and <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=25503">Chrome bug 25503</a> for further details.</p>
+
+<h2 id="Whitespace_keys">Whitespace keys</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>"Enter"</code></td>
+ <td>The <kbd>Enter</kbd> or <kbd>↵</kbd> key (sometimes labeled <kbd>Return</kbd>).</td>
+ <td><code>VK_RETURN</code> (0x0D)</td>
+ <td><code>kVK_Return</code> (0x24)<br>
+ <code>kVK_ANSI_KeypadEnter</code> (0x4C)<br>
+ <code>kVK_Powerbook_KeypadEnter</code> (0x34)</td>
+ <td><code><code>GDK_KEY_Return</code> (0xFF0D)</code><br>
+ <code><code>GDK_KEY_KP_Enter</code> (0xFF8D)</code><br>
+ <code><code>GDK_KEY_ISO_Enter</code> (0xFE34)</code><br>
+ <code><code>GDK_KEY_3270_Enter</code> (0xFD1E)</code><br>
+ <code>Qt::Key_Return</code> (0x01000004)<br>
+ <code>Qt::Key_Enter</code> (0x01000005)</td>
+ <td><code>KEYCODE_ENTER</code> (66)<br>
+ <code>KEYCODE_NUMPAD_ENTER</code> (160)<br>
+ <code>KEYCODE_DPAD_CENTER</code> (23)</td>
+ </tr>
+ <tr>
+ <td><code>"Tab"</code></td>
+ <td>The Horizontal Tab key, <kbd>Tab</kbd>.</td>
+ <td><code>VK_TAB</code> (0x09)</td>
+ <td><code>kVK_Tab</code> (0x30)</td>
+ <td><code><code>GDK_KEY_Tab</code> (0xFF09)</code><br>
+ <code><code>GDK_KEY_KP_Tab</code> (0xFF89)<br>
+ GDK_KEY_ISO_Left_Tab</code> (0xFE20)<br>
+ <code>Qt::Key_Tab</code> (0x01000001)</td>
+ <td><code>KEYCODE_TAB</code> (61)</td>
+ </tr>
+ <tr>
+ <td><code>" "</code> [1]</td>
+ <td>The space key, <kbd>Space Bar</kbd>.</td>
+ <td><code>VK_SPACE</code> (0x20)</td>
+ <td><code>kVK_Space</code> (0x31)</td>
+ <td>
+ <p><code>GDK_KEY_space</code> (0x20)<br>
+ <code>GDK_KEY_KP_Space</code> (0xFF80)<br>
+ <code>Qt::Key_Space</code> (0x20)</p>
+ </td>
+ <td><code>KEYCODE_SPACE</code> (62)</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>[1] Older browsers may return "Spacebar" instead of " " for the <kbd>Space Bar</kbd> key. Firefox did so until version 37, as did Internet Explorer 9, 10, and 11.</p>
+
+<h2 id="Navigation_keys">Navigation keys</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>"ArrowDown"</code> [1]</td>
+ <td>The down arrow key.</td>
+ <td><code>VK_DOWN</code> (0x28)</td>
+ <td><code>kVK_DownArrow</code> (0x7D)</td>
+ <td><code>GDK_KEY_Down</code> (0xFF54)<br>
+ <code>GDK_KEY_KP_Down</code> (0xFF99)<br>
+ <code>Qt::Key_Down</code> (0x01000015)</td>
+ <td><code>KEYCODE_DPAD_DOWN</code> (20)</td>
+ </tr>
+ <tr>
+ <td><code>"ArrowLeft"</code> [1]</td>
+ <td>The left arrow key.</td>
+ <td><code>VK_LEFT</code> (0x25)</td>
+ <td><code>kVK_LeftArrow</code> (0x7B)</td>
+ <td><code>GDK_KEY_Left</code> (0xFF51)<br>
+ <code>GDK_KEY_KP_Left</code> (0xFF96)<br>
+ <code>Qt::Key_Left</code> (0x01000012)</td>
+ <td><code>KEYCODE_DPAD_LEFT</code> (21)</td>
+ </tr>
+ <tr>
+ <td><code>"ArrowRight"</code> [1]</td>
+ <td>The right arrow key.</td>
+ <td><code>VK_RIGHT</code> (0x27)</td>
+ <td><code>kVK_RightArrow</code> (0x7C)</td>
+ <td><code>GDK_KEY_Right</code> (0xFF53)<br>
+ <code>GDK_KEY_KP_Right</code> (0xFF98)<br>
+ <code>Qt::Key_Right</code> (0x01000014)</td>
+ <td><code>KEYCODE_DPAD_RIGHT</code> (22)</td>
+ </tr>
+ <tr>
+ <td><code>"ArrowUp"</code> [1]</td>
+ <td>The up arrow key.</td>
+ <td><code>VK_UP</code><code> (0x26)</code></td>
+ <td><code>kVK_UpArrow</code> (0x7E)</td>
+ <td><code>GDK_KEY_Up</code> (0xFF52)<br>
+ <code>GDK_KEY_KP_Up</code> (0xFF97)<br>
+ <code>Qt::Key_Up</code> (0x01000013)</td>
+ <td><code>KEYCODE_DPAD_UP</code> (19)</td>
+ </tr>
+ <tr>
+ <td><code>"End"</code></td>
+ <td>The <kbd>End</kbd> key. Moves to the end of content.</td>
+ <td><code>VK_END</code> (0x23)</td>
+ <td><code>kVK_End</code> (0x77)</td>
+ <td><code>GDK_KEY_End</code> (0xFF57)<br>
+ <code>GDK_KEY_KP_End</code> (0xFF9C)<br>
+ <code>Qt::Key_End</code> (0x01000011)</td>
+ <td><code>KEYCODE_MOVE_END</code> (123)</td>
+ </tr>
+ <tr>
+ <td><code>"Home"</code></td>
+ <td>The <kbd>Home</kbd> key. Moves to the start of content.</td>
+ <td><code>VK_HOME</code> (0x24)</td>
+ <td><code>kVK_Home</code> (0x73)</td>
+ <td><code>GDK_KEY_Home</code> (0xFF50)<br>
+ <code>GDK_KEY_KP_Home</code> (0xFF95)<br>
+ <code>Qt::Key_Home</code> (0x01000010)</td>
+ <td><code>KEYCODE_MOVE_HOME</code> (122)</td>
+ </tr>
+ <tr>
+ <td><code>"PageDown"</code></td>
+ <td>The <kbd>Page Down</kbd> (or <kbd>PgDn</kbd>) key. Scrolls down or displays the next page of content.</td>
+ <td><code>VK_NEXT</code> (0x22)</td>
+ <td><code>kVK_PageDown</code><code> (0x79)</code></td>
+ <td><code>GDK_KEY_Page_Down</code> (0xFF56)<br>
+ <code>GDK_KEY_KP_Page_Down</code> (0xFF9B)<br>
+ <code>Qt::Key_PageDown</code> (0x01000017)</td>
+ <td><code>KEYCODE_PAGE_DOWN</code> (93)</td>
+ </tr>
+ <tr>
+ <td><code>"PageUp"</code></td>
+ <td>The <kbd>Page Up</kbd> (or <kbd>PgUp</kbd>) key. Scrolls up or displays the previous page of content.</td>
+ <td><code>VK_PRIOR</code> (0x21)</td>
+ <td><code>kVK_PageUp</code> (0x74)</td>
+ <td><code>GDK_KEY_Page_Up</code> (0xFF55)<br>
+ <code>GDK_KEY_KP_Page_Up</code> (0xFF9A)<br>
+ <code>Qt::Key_PageUp</code> (0x01000016)</td>
+ <td><code>KEYCODE_PAGE_UP</code> (92)</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>[1] Internet Explorer, Edge (16 and earlier), and Firefox (36 and earlier) use "Left", "Right", "Up", and "Down" instead of "ArrowLeft", "ArrowRight", "ArrowUp", and "ArrowDown".</p>
+
+<h2 id="Editing_keys">Editing keys</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>"Backspace"</code></td>
+ <td>The <kbd>Backspace</kbd> key. This key is labeled <kbd>Delete</kbd> on Mac keyboards.</td>
+ <td><code>VK_BACK</code> (0x08)</td>
+ <td><code>kVK_Delete</code> (0x33)</td>
+ <td><code>GDK_KEY_BackSpace</code> (0xFF08)<br>
+ <code>Qt::Key_Backspace</code> (0x01000003)</td>
+ <td><code>KEYCODE_DEL</code> (67)</td>
+ </tr>
+ <tr>
+ <td><code>"Clear"</code></td>
+ <td>The <kbd>Clear</kbd> key. Removes the currently selected input.</td>
+ <td><code>VK_CLEAR</code> (0x0C)<br>
+ <code>VK_OEM_CLEAR</code> (0xFE)</td>
+ <td><code>kVK_ANSI_KeypadClear</code> (0x47)</td>
+ <td><code>GDK_KEY_Clear</code> (0xFF0B)<br>
+ <code>Qt::Key_Clear</code> (0x0100000B)</td>
+ <td><code>KEYCODE_CLEAR</code> (28)</td>
+ </tr>
+ <tr>
+ <td><code>"Copy"</code></td>
+ <td>The <kbd>Copy</kbd> key (on certain extended keyboards).</td>
+ <td><code>APPCOMMAND_COPY</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Copy</code> (0x1008FF57)<br>
+ <code>Qt::Key_Copy</code> (0x010000CF)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"CrSel"</code> [3]</td>
+ <td>The Cursor Select key, <kbd>CrSel</kbd>.</td>
+ <td><code>VK_CRSEL</code> (0xF7)</td>
+ <td></td>
+ <td><code>GDK_KEY_3270_CursorSelect</code> (0xFD1C)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Cut"</code></td>
+ <td>The <kbd>Cut</kbd> key (on certain extended keyboards).</td>
+ <td><code>APPCOMMAND_CUT</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Cut</code> (0x1008FF58)<br>
+ <code>Qt::Key_Cut</code> (0x010000D0)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Delete"</code> [2]</td>
+ <td>The Delete key, <kbd>Del</kbd>.</td>
+ <td><code>VK_DELETE</code> (0x2E)</td>
+ <td><code>kVK_ForwardDelete</code> (0x75) [1]</td>
+ <td><code>GDK_KEY_Delete</code> (0xFFFF)<br>
+ <code>GDK_KEY_KP_Delete</code> (0xFF9F)<br>
+ <code>Qt::Key_Delete</code> (0x01000007)</td>
+ <td><code>KEYCODE_FORWARD_DEL</code> (112)</td>
+ </tr>
+ <tr>
+ <td><code>"EraseEof"</code></td>
+ <td>Erase to End of Field. Deletes all characters from the current cursor position to the end of the current field.</td>
+ <td><code>VK_EREOF</code> (0xF9)</td>
+ <td></td>
+ <td><code>GDK_KEY_3270_ExSelect</code> (0xFD1B)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"ExSel"</code> [4]</td>
+ <td>The <kbd>ExSel</kbd> (Extend Selection) key.</td>
+ <td><code>VK_EXSEL</code> (0xF8)</td>
+ <td></td>
+ <td><code>GDK_KEY_3270_ExSelect</code> (0xFD1B)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Insert"</code></td>
+ <td>The Insert key, <kbd>Ins</kbd>. Toggles between inserting and overwriting text.</td>
+ <td><code>VK_INSERT</code> (0x2D)</td>
+ <td></td>
+ <td><code>GDK_KEY_Insert</code> (0xFF63)<br>
+ <code>GDK_KEY_KP_Insert</code> (0xFF9E)<br>
+ <code>Qt::Key_Insert</code> (0x01000006)</td>
+ <td><code>KEYCODE_INSERT</code> (124)</td>
+ </tr>
+ <tr>
+ <td><code>"Paste"</code></td>
+ <td>Paste from the clipboard.</td>
+ <td><code>APPCOMMAND_PASTE</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Paste</code> (0x1008FF6D)<br>
+ <code>Qt::Key_Paste</code> (0x010000E2)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Redo"</code></td>
+ <td>Redo the last action.</td>
+ <td><code>APPCOMMAND_REDO</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Redo</code> (0xFF66)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Undo"</code></td>
+ <td>Undo the last action.</td>
+ <td><code>APPCOMMAND_UNDO</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Undo</code> (0xFF65)</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>[1] On keyboards without a dedicated <kbd>Del</kbd> key, the Mac generates the <code>"Delete"</code> value when <kbd>Fn</kbd> is pressed in tandem with <kbd>Delete</kbd> (which is <kbd>Backspace</kbd> on other platforms).</p>
+
+<p>[2] Internet Explorer 9 and Firefox 36 and earlier use "Del" instead of "Delete" for the <kbd>Del</kbd> key.</p>
+
+<p>[3] Internet Explorer 9 and Firefox 36 and earlier generate the value <code>"Crsel"</code> instead of <code>"CrSel"</code> when the <kbd>CrSel</kbd> key is pressed.</p>
+
+<p>[4] Internet Explorer 9 and Firefox 36 and earlier generate the value <code>"Exsel"</code> instead of <code>"ExSel"</code> when the <kbd>ExSel</kbd> key is pressed.</p>
+
+<p>[5] Prior to Firefox 37, this key generated the value <code>"Unidentified"</code>.</p>
+
+<h2 id="UI_keys">UI keys</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>"Accept"</code></td>
+ <td>The <kbd>Accept</kbd>, <kbd>Commit</kbd>, or <kbd>OK</kbd> key or button. Accepts the currently selected option or input method sequence conversion.</td>
+ <td><code>VK_ACCEPT</code> (0x1E)</td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_DPAD_CENTER</code> (23)</td>
+ </tr>
+ <tr>
+ <td><code>"Again"</code></td>
+ <td>The <kbd>Again</kbd> key. Redoes or repeats a previous action.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Redo</code> (0xFF66)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Attn"</code> [4]</td>
+ <td>The <kbd>Attn</kbd> (Attention) key.</td>
+ <td><code>VK_OEM_ATTN</code> (0xF0)</td>
+ <td></td>
+ <td><code>GDK_KEY_3270_Attn</code> (0xFD0E)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Cancel"</code> [1]</td>
+ <td>The <kbd>Cancel</kbd> key.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Cancel</code> (0xFF69)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"ContextMenu"</code> [3]</td>
+ <td>Shows the context menu. Typically found between the <kbd>Windows</kbd> (or <kbd>OS</kbd>) key and the <kbd>Control</kbd> key on the right side of the keyboard.</td>
+ <td><code>VK_APPS</code> (0x5D)</td>
+ <td><code>kVK_PC_ContextMenu</code> (0x6E)</td>
+ <td><code>GDK_KEY_Menu</code> (0xFF67)<br>
+ <code>Qt::Key_Menu</code> (0x01000055)</td>
+ <td><code>KEYCODE_MENU</code> (82)</td>
+ </tr>
+ <tr>
+ <td><code>"Escape"</code> [2]</td>
+ <td>The <kbd>Esc</kbd> (Escape) key. Typically used as an exit, cancel, or "escape this operation" button. Historically, the Escape character was used to signal the start of a special control sequence of characters called an "escape sequence."</td>
+ <td><code>VK_ESCAPE</code> (0x1B)</td>
+ <td><code>kVK_Escape</code> (0x35)</td>
+ <td><code>GDK_KEY_Escape</code> (0xFF1B)<br>
+ <code>Qt::Key_Escape</code> (0x01000000)</td>
+ <td><code>KEYCODE_ESCAPE</code> (111)</td>
+ </tr>
+ <tr>
+ <td><code>"Execute"</code></td>
+ <td>The <kbd>Execute</kbd> key.</td>
+ <td><code>VK_EXECUTE</code> (0x2B)</td>
+ <td></td>
+ <td><code>Qt::Key_Execute</code> (0x01020003)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Find"</code></td>
+ <td>The <kbd>Find</kbd> key. Opens an interface (typically a dialog box) for performing a find/search operation.</td>
+ <td><code>APPCOMMAND_FIND</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Find</code> (0xFF68)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Finish"</code> [5]</td>
+ <td>The <kbd>Finish</kbd> key.</td>
+ <td><code>VK_OEM_FINISH</code> (0xF1)</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Help"</code></td>
+ <td>The <kbd>Help</kbd> key. Opens or toggles the display of help information.</td>
+ <td><code>VK_HELP</code> (0x2F)<br>
+ <code>APPCOMMAND_HELP</code></td>
+ <td><code>kVK_Help</code> (0x72)</td>
+ <td><code>GDK_KEY_Help</code> (0xFF6A)<br>
+ <code>Qt::Key_Help</code> (0x01000058)</td>
+ <td><code>KEYCODE_HELP</code> (259)</td>
+ </tr>
+ <tr>
+ <td><code>"Pause"</code></td>
+ <td>The <kbd>Pause</kbd> key. Pauses the current application or state, if applicable.
+ <div class="note">This shouldn't be confused with the <code>"MediaPause"</code> key value, which is used for media controllers, rather than to control applications and processes.</div>
+ </td>
+ <td><code>VK_PAUSE</code> (0x13)</td>
+ <td></td>
+ <td><code>GDK_KEY_Pause</code> (0xFF13)<br>
+ <code>GDK_KEY_Break</code> (0xFF6B)<br>
+ <code>Qt::Key_Pause</code> (0x01000008)</td>
+ <td><code>KEYCODE_BREAK</code> (121)</td>
+ </tr>
+ <tr>
+ <td><code>"Play"</code></td>
+ <td>The <kbd>Play</kbd> key. Resumes a previously paused application, if applicable.
+ <div class="note">This shouldn't be confused with the <code>"MediaPlay"</code> key value, which is used for media controllers, rather than to control applications and processes.</div>
+ </td>
+ <td><code>VK_PLAY</code> (0xFA)</td>
+ <td></td>
+ <td><code>GDK_KEY_3270_Play</code> (0xFD16)<br>
+ <code>Qt::Key_Play</code> (0x01020005)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Props"</code></td>
+ <td>The <kbd>Props</kbd> (Properties) key.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Select"</code></td>
+ <td>The <kbd>Select</kbd> key.</td>
+ <td><code>VK_SELECT</code> (0x29)</td>
+ <td></td>
+ <td><code>GDK_KEY_Select</code> (0xFF60)</td>
+ <td><code>KEYCODE_BUTTON_SELECT</code> (109)</td>
+ </tr>
+ <tr>
+ <td><code>"ZoomIn"</code> [6]</td>
+ <td>The <kbd>ZoomIn</kbd> key.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_ZoomIn</code> (0x1008FF8B)<br>
+ <code>Qt::Key_ZoomIn</code> (0x010000F6)</td>
+ <td><code>KEYCODE_ZOOM_IN</code> (168)</td>
+ </tr>
+ <tr>
+ <td><code>"ZoomOut"</code> [6]</td>
+ <td>The <kbd>ZoomOut</kbd> key.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_ZoomOut</code> (0x1008FF8C)<br>
+ <code>Qt::Key_ZoomOut</code> (0x010000F7)</td>
+ <td><code>KEYCODE_ZOOM_OUT</code> (169)</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>[1] In Google Chrome 52, the <kbd>Cancel</kbd> key incorrectly returns the key code <code>"Pause"</code>. This is fixed in Chrome 53. See <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=612749">Chrome bug 612749</a> for details.</p>
+
+<p>[2] In Internet Explorer 9 and Firefox 36 and earlier, the <kbd>Esc</kbd> key returns <code>"Esc"</code> instead of <code>"Escape"</code>.</p>
+
+<p>[3] Internet Explorer 9 and Firefox 36 and earlier report <code>"Apps"</code> instead of <code>"ContextMenu"</code> for the context menu key.</p>
+
+<p>[4] The <kbd>Attn</kbd> key generates the key code <code>"Unidentified"</code> on Internet Explorer 9. Firefox and Google Chrome report the same, unless the Japanese keyboard layout is in effect, in which case it generates <code>"KanaMode"</code> instead.</p>
+
+<p>[5] The <kbd>Finish</kbd> key gemerates the key code <code>"Unidentified"</code> on Internet Explorer 9. Firefox reports the same, unless the Japanese keyboard layout is in effect, in which case it generates <code>"Katakana"</code> instead.</p>
+
+<p>[6] Firefox didn't support the <code>"ZoomIn"</code> and <code>"ZoomOut"</code> keys until Firefox 37.</p>
+
+<h2 id="Device_keys">Device keys</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>"BrightnessDown"</code></td>
+ <td>The Brightness Down key. Typically used to reduce the brightness of the display.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_MonBrightnessDown</code> (0x1008FF03)<br>
+ <code>Qt::Key_MonBrightnessDown</code> (0x010000B3)</td>
+ <td><code>KEYCODE_BRIGHTNESS_DOWN</code> (220)</td>
+ </tr>
+ <tr>
+ <td><code>"BrightnessUp"</code></td>
+ <td>The Brightness Up key. Typically increases the brightness of the display.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_MonBrightnessUp</code> (0x1008FF02)<br>
+ <code>Qt::Key_MonBrightnessUp</code> (0x010000B2)</td>
+ <td><code>KEYCODE_BRIGHTNESS_UP</code> (221)</td>
+ </tr>
+ <tr>
+ <td><code>"Eject"</code></td>
+ <td>The <kbd>Eject</kbd> key. Ejects removable media (or toggles an optical storage device tray open and closed).</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Eject</code> (0x1008FF2C)<br>
+ <code>Qt::Key_Eject</code> (0x010000B9)</td>
+ <td><code>KEYCODE_MEDIA_EJECT</code> (129)</td>
+ </tr>
+ <tr>
+ <td><code>"LogOff"</code> [2]</td>
+ <td>The <kbd>LogOff</kbd> key.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_LogOff</code> (0x1008FF61)<br>
+ <code>Qt::Key_LogOff</code> (0x010000D9)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Power"</code></td>
+ <td>The <kbd>Power</kbd> button or key, to toggle power on and off.
+ <div class="note">Not all systems pass this key through to to the user agent.</div>
+ </td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_POWER</code> (26)</td>
+ </tr>
+ <tr>
+ <td><code>"PowerOff"</code></td>
+ <td>The <kbd>PowerOff</kbd> or <kbd>PowerDown</kbd> key. Shuts off the system.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_PowerDown</code> (0x1008FF21)<br>
+ <code>GDK_KEY_PowerOff</code> (0x1008FF2A)<br>
+ <code>Qt::Key_PowerDown</code> (0x0100010B)<br>
+ <code>Qt::Key_PowerOff</code> (0x010000B7)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"PrintScreen"</code></td>
+ <td>The <kbd>PrintScreen</kbd> or <kbd>PrtScr</kbd> key. Sometimes <kbd>SnapShot</kbd>. Captures the screen and prints it or saves it to disk.</td>
+ <td><code>VK_SNAPSHOT</code> (0x2C)</td>
+ <td></td>
+ <td><code>GDK_KEY_3270_PrintScreen</code> (0xFD1D)<br>
+ <code>GDK_KEY_Print</code> (0xFF61)<br>
+ <code>GDK_KEY_Sys_Req</code> (0xFF15)<br>
+ <code>Qt::Key_Print</code> (0x01000009)<br>
+ <code>Qt::Key_SysReq</code> (0x0100000A)</td>
+ <td><code>KEYCODE_SYSRQ</code> (120)</td>
+ </tr>
+ <tr>
+ <td><code>"Hibernate"</code> [2]</td>
+ <td>The <kbd>Hibernate</kbd> key. This saves the state of the computer to disk and then shuts down; the computer can be returned to its previous state by restoring the saved state information.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Hibernate</code> (0x1008FFA8)<br>
+ <code>Qt::Key_Hibernate</code> (0x01000108)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Standby"</code> [1]</td>
+ <td>The <kbd>Standby</kbd> key; also known as <kbd>Suspend</kbd> or <kbd>Sleep</kbd>. This turns off the display and puts the computer in a low power consumption mode, without completely powering off.</td>
+ <td><code>VK_SLEEP</code> (0x5F)</td>
+ <td></td>
+ <td><code>GDK_KEY_Standby</code> (0x1008FF10)<br>
+ <code>GDK_KEY_Suspend</code> (0x1008FFA7)<br>
+ <code>GDK_KEY_Sleep</code> (0x1008FF2F)<br>
+ <code>Qt::Key_Standby</code> (0x01000093)<br>
+ <code>Qt::Key_Suspend</code> (0x0100010C)<br>
+ <code>Qt::Key_Sleep</code> (0x01020004)</td>
+ <td><code>KEYCODE_SLEEP</code> (223)</td>
+ </tr>
+ <tr>
+ <td><code>"WakeUp"</code> [2]</td>
+ <td>The <kbd>WakeUp</kbd> key; used to wake the computer from the hibernation or standby modes.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_WakeUp</code> (0x1008FF2B)<br>
+ <code>Qt::Key_WakeUp</code> (0x010000B8)</td>
+ <td><code>KEYCODE_WAKEUP</code> (224)</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>[1] The <kbd>Standby</kbd> key is not supported by Internet Explorer 9 and Firefox 36 and earlier, so it is reported as <code>"Unidentified"</code>.</p>
+
+<p>[2] Prior to Firefox 37, this key generated the value <code>"Unidentified"</code>.</p>
+
+<h2 id="IME_and_composition_keys">IME and composition keys</h2>
+
+<p>Keys used when using an Input Method Editor (IME) to input text which can't readily be entered by simple keypresses, such as text in languages such as those which have more graphemes than there are character entry keys on the keyboard; common examples include Chinese, Japanese, Korean, and Hindi.</p>
+
+<p>Some keys are common across multiple languages, while others exist only on keyboards targeting specific languages. In addition, not all keyboards have all of these keys.</p>
+
+<h4 id="Common_IME_keys">Common IME keys</h4>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>"AllCandidates"</code></td>
+ <td>The <kbd>All Candidates</kbd> key, which starts multi-candidate mode, in which multiple candidates are displayed for the ongoing input.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_MultipleCandidate</code> (0xFF3D<br>
+ <code>Qt::Key_MultipleCandidate</code> (0x0100113D)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Alphanumeric"</code></td>
+ <td>The <kbd>Alphanumeric</kbd> key.</td>
+ <td><code>VK_OEM_ATTN</code> (0xF0)</td>
+ <td></td>
+ <td><code>GDK_KEY_Eisu_Shift</code> (0xFF2F)<br>
+ <code>GDK_KEY_Eisu_toggle</code> (0xFF30)<br>
+ <code>Qt::Key_Eisu_Shift</code> (0x0100112f)<br>
+ <code>Qt::Key_Eisu_toggle</code> (0x01001130)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"CodeInput"</code></td>
+ <td>The <kbd>Code Input</kbd> key, which enables code input mode, which lets the user enter characters by typing their code points (their Unicode character numbers, typically).</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Codeinput</code> (0xFF37)<br>
+ <code>Qt::Key_Codeinput</code> (0x01001137)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Compose"</code></td>
+ <td>The <kbd>Compose</kbd> key.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Multi_key</code> (0xFF20) [1]<br>
+ <code>Qt::Key_Multi_key</code> (0x01001120)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Convert"</code> [4]</td>
+ <td>The <kbd>Convert</kbd> key, which instructs the IME to convert the current input method sequence into the resulting character.</td>
+ <td><code>VK_CONVERT</code> (0x1C)</td>
+ <td></td>
+ <td><code>GDK_KEY_Henkan</code> (0xFF23)<br>
+ <code>Qt::Key_Henkan</code> (0x01001123)</td>
+ <td><code>KEYCODE_HENKAN</code> (214)</td>
+ </tr>
+ <tr>
+ <td><code>"Dead"</code></td>
+ <td>A dead "combining" key; that is, a key which is used in tandem with other keys to generate accented and other modified characters. If pressed by itself, it doesn't generate a character. If you wish to identify which specific dead key was pressed (in cases where more than one exists), you can do so by examining the {{domxref("KeyboardEvent")}}'s associated {{event("compositionupdate")}} event's {{domxref("CompositionEvent.data", "data")}} property.</td>
+ <td></td>
+ <td></td>
+ <td>See {{anch("Dead keycodes for Linux")}} below</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FinalMode"</code></td>
+ <td>The <kbd>Final</kbd> (Final Mode) key is used on some Asian keyboards to enter final mode when using IMEs.</td>
+ <td><code>VK_FINAL</code> (0x18)</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"GroupFirst"</code></td>
+ <td>Switches to the first character group on an <a href="https://en.wikipedia.org/wiki/ISO/IEC_9995">ISO/IEC 9995 keyboard</a>. Each key may have multiple groups of characters, each in its own column. Pressing this key instructs the device to interpret keypresses as coming from the first column on subsequent keystrokes.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_ISO_First_Group</code> (0xFE0C)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"GroupLast"</code></td>
+ <td>Switches to the last character group on an <a href="https://en.wikipedia.org/wiki/ISO/IEC_9995">ISO/IEC 9995 keyboard</a>.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_ISO_Last_Group</code> (0xFE0E)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"GroupNext"</code> [4]</td>
+ <td>Switches to the next character group on an <a href="https://en.wikipedia.org/wiki/ISO/IEC_9995">ISO/IEC 9995 keyboard</a>.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_ISO_Next_Group</code> (0xFE08)</td>
+ <td><code>KEYCODE_LANGUAGE_SWITCH</code> (204)</td>
+ </tr>
+ <tr>
+ <td><code>"GroupPrevious"</code></td>
+ <td>Switches to the previous character group on an <a href="https://en.wikipedia.org/wiki/ISO/IEC_9995">ISO/IEC 9995 keyboard</a>.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_ISO_Prev_Group</code> (0xFE0A)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"ModeChange"</code> [5]</td>
+ <td>The Mode Change key. Toggles or cycles among input modes of IMEs.</td>
+ <td><code>VK_MODECHANGE</code> (0x1F)</td>
+ <td></td>
+ <td><code>GDK_KEY_Mode_switch</code> (0xFF7E)<br>
+ <code>GDK_KEY_script_switch</code> (0xFF7E)<br>
+ <code>Qt::Key_Mode_switch</code> (0x0100117E)</td>
+ <td><code>KEYCODE_SWITCH_CHARSET</code> (95)</td>
+ </tr>
+ <tr>
+ <td><code>"NextCandidate"</code></td>
+ <td>The Next Candidate function key. Selects the next possible match for the ongoing input.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"NonConvert"</code> [2]</td>
+ <td>The <kbd>NonConvert</kbd> ("Don't convert") key. This accepts the current input method sequence without running conversion when using an IME.</td>
+ <td><code>VK_NONCONVERT</code> (0x1D)</td>
+ <td></td>
+ <td><code>GDK_KEY_Muhenkan</code> (0xFF22)<br>
+ <code>Qt::Key_Muhenkan</code> (0x01001122)</td>
+ <td><code>KEYCODE_MUHENKAN</code> (213)</td>
+ </tr>
+ <tr>
+ <td><code>"PreviousCandidate"</code></td>
+ <td>The Previous Candidate key. Selects the previous possible match for the ongoing input.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_PreviousCandidate</code> (0xFF3E)<br>
+ <code>Qt::Key_PreviousCandidate</code> (0x0100113E)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Process"</code> [3]</td>
+ <td>The <kbd>Process</kbd> key. Instructs the IME to process the conversion.</td>
+ <td><code>VK_PROCESSKEY</code> (0xE5)</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"SingleCandidate"</code> [4]</td>
+ <td>The Single Candidate key. Enables single candidate mode (as opposed to multi-candidate mode); in this mode, only one candidate is displayed at a time.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_SingleCandidate</code> (0xFF3C)<br>
+ <code>Qt::Key_SingleCandidate</code> (0x0100113C)</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>[1] On the <em>X Window System</em>, the <kbd>Compose</kbd> key is called the <kbd>Multi</kbd> key.</p>
+
+<p>[2] The <kbd>NonConvert</kbd> key is reported as <code>"Nonconvert"</code> instead of the correct <code>"NonConvert"</code> by Internet Explorer 9 and Firefox versions 36 and earlier.</p>
+
+<p>[3] The <kbd>Process</kbd> key currently returns <code>"Unidentified"</code> in Firefox and Internet Explorer. Google Chrome returns the value of the key as if IME were not in use.</p>
+
+<p>[4] Prior to Firefox 37, these keys were <code>"Unidentified"</code>.</p>
+
+<p>[5] Firefox generates the key value <code>"AltGraph"</code> instead of <code>"ModeChange"</code>.</p>
+
+<h3 id="Korean_keyboards_only">Korean keyboards only</h3>
+
+<p>These keys are only available on Korean keyboards. There are other keys defined by various platforms for Korean keyboards, but these are the most common and are the ones identified by the UI Events specification.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"HangulMode"</code></td>
+ <td>The <kbd>Hangul</kbd> (Korean character set) mode key, which toggles between Hangul and English entry modes.</td>
+ <td><code>VK_HANGUL</code> (0x15) [1]</td>
+ <td></td>
+ <td><code>GDK_KEY_Hangul</code> (0xFF31)<br>
+ <code>Qt::Key_Hangul</code> (0x01001131)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"HanjaMode"</code></td>
+ <td>Selects the Hanja mode, for converting Hangul characters to the more specific Hanja characters.</td>
+ <td><code>VK_HANJA</code> (0x19) [1]</td>
+ <td></td>
+ <td><code>GDK_KEY_Hangul_Hanja</code> (0xFF34)<br>
+ <code>Qt::Key_Hangul_Hanja</code> (0x01001134)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"JunjaMode"</code></td>
+ <td>Selects the Junja mode, in which Korean is represented using single-byte Latin characters.</td>
+ <td><code>VK_JUNJA</code> (0x17)</td>
+ <td></td>
+ <td><code>GDK_KEY_Hangul_Jeonja</code> (0xFF38)<br>
+ <code>Qt::Key_Hangul_Jeonja</code> (0x01001138)</td>
+ <td></td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] <code>VK_HANGUL</code> and <code>VK_KANA</code> share the same numeric key value on Windows, as do <code>VK_HANJA</code> and <code>VK_KANJI</code>.</p>
+
+<h3 id="Japanese_keyboards_only">Japanese keyboards only</h3>
+
+<p>These keys are only available on Japanese keyboards.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"Eisu"</code> [1]</td>
+ <td>The <kbd>Eisu</kbd> key. This key's purpose is defined by the IME, but may be used to close the IME.</td>
+ <td></td>
+ <td><code>kVK_JIS_Eisu</code> (0x66)</td>
+ <td><code>GDK_KEY_Eisu_toggle</code> (0xFF2F)<br>
+ <code>Qt::Key_Eisu_toggle</code> (0x01001130)</td>
+ <td><code>KEYCODE_EISU</code> (212)</td>
+ </tr>
+ <tr>
+ <td><code>"Hankaku"</code> [3]</td>
+ <td>The <kbd>Hankaku</kbd> (half-width characters) key.</td>
+ <td><code>VK_OEM_AUTO</code> (0xF3)</td>
+ <td></td>
+ <td><code>GDK_KEY_Hankaku</code> (0xFF29)<br>
+ <code>Qt::Key_Hankaku</code> (0x01001129)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Hiragana"</code></td>
+ <td>The <kbd>Hiragana</kbd> key; selects Kana characters mode.</td>
+ <td><code>VK_OEM_COPY</code> (0xF2)</td>
+ <td></td>
+ <td><code>GDK_KEY_Hiragana</code> (0xFF25)<br>
+ <code>Qt::Key_Hiragana</code> (0x01001125)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"HiraganaKatakana"</code> [6]</td>
+ <td>Toggles between the Hiragana and Katakana writing systems.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Hiragana_Katakana</code> (0xFF27)<br>
+ <code>Qt::Key_Hiragana_Katakana</code> (0x01001127)</td>
+ <td><code>KEYCODE_KATAKANA_HIRAGANA</code> (215)</td>
+ </tr>
+ <tr>
+ <td><code>"KanaMode"</code></td>
+ <td>The <kbd>Kana Mode</kbd> (Kana Lock) key.</td>
+ <td><code>VK_KANA</code> (0x15) [2]<br>
+ <code>VK_ATTN</code> (0xF6)</td>
+ <td></td>
+ <td><code>GDK_KEY_Kana_Lock</code> (0xFF2D)<br>
+ <code>GDK_KEY_Kana_Shift</code> (0xFF2E)<br>
+ <code>Qt::Key_Kana_Lock</code> (0x0100112D)<br>
+ <code>Qt::Key_Kana_Shift</code> (0x0100112E)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"KanjiMode"</code></td>
+ <td>The <kbd>Kanji Mode</kbd> key. Enables entering Japanese text using the ideographic characters of Chinese origin.</td>
+ <td><code>VK_KANJI</code> [2]</td>
+ <td><code>kVK_JIS_Kana</code> (0x68)</td>
+ <td><code>GDK_KEY_Kanji</code> (0xFF21)<br>
+ <code>Qt::Key_Kanji</code> (0x01001121)</td>
+ <td><code>KEYCODE_KANA</code> (218)</td>
+ </tr>
+ <tr>
+ <td><code>"Katakana"</code></td>
+ <td>The <kbd>Katakana</kbd> key.</td>
+ <td><code>VK_OEM_FINISH</code> (0xF1)</td>
+ <td></td>
+ <td><code>GDK_KEY_Katakana</code> (0xFF26)<br>
+ <code>Qt::Key_Katakana</code> (0x01001126)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Romaji"</code> [5]</td>
+ <td>The <kbd>Romaji</kbd> key; selects the Roman character set.</td>
+ <td><code>VK_OEM_BACKTAB</code> (0xF5)</td>
+ <td></td>
+ <td><code>GDK_KEY_Romaji</code> (0xFF24)<br>
+ <code>Qt::Key_Romaji</code> (0x01001124)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Zenkaku"</code> [4]</td>
+ <td>The <kbd>Zenkaku</kbd> (full width) characters key.</td>
+ <td><code>VK_OEM_ENLW</code> (0xF4)</td>
+ <td></td>
+ <td><code>GDK_KEY_Zenkaku</code> (0xFF28)<br>
+ <code>Qt::Key_Zenkaku</code> (0x01001128)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"ZenkakuHanaku"</code> [6]</td>
+ <td>The <kbd>Zenkaku/Hankaku</kbd> (full width/half width) toggle key.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Zenkaku_Hankaku</code> (0xFF2A)<br>
+ <code>Qt::Zenkaku_Hankaku</code> (0x0100112A)</td>
+ <td>
+ <p><code>KEYCODE_ZENKAKU_HANKAKU</code> (211)</p>
+ </td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] Prior to Firefox 37, the <kbd>Eisu</kbd> key was mapped to <code>"RomanCharacters"</code> by mistake.</p>
+
+<p>[2] <code>VK_HANGUL</code> and <code>VK_KANA</code> share the same numeric key value on Windows, as do <code>VK_HANJA</code> and <code>VK_KANJI</code>.</p>
+
+<p>[3] Prior to Firefox 37, the <kbd>Hankaku</kbd> (half-width) key generated the key value <code>"HalfWidth"</code> on Firefox. Also, this key generates the value <code>"Unidentified"</code> on Internet Explorer 9.</p>
+
+<p>[4] Internet Explorer 9 reports <code>"Unidentified"</code> for the <kbd>Zenkaku</kbd> key; Firefox 36 and earlier identify this key as <code>"FullWidth"</code> on Japanese keyboard layouts and <code>"Unidentified"</code> on all other keyboard layouts. Firefox 37 and later, and all versions of Google Chrome, correctly return <code>"Zenkaku"</code>.</p>
+
+<p>[5] <code>"Unidentified"</code> in Internet Explorer 9. Firefox 36 and earlier identify the <kbd>Romaji</kbd> key as <code>"RomanCharacters"</code> on Japanese keyboards and <code>"Unidentified"</code> for other keyboards; this is corrected to return <code>"Romaji"</code> in Firefox 37 and later.</p>
+
+<p>[6] This key is reported as <code>"Unidentified"</code> prior to Firefox 37.</p>
+
+<h3 id="Dead_keycodes_for_Linux">Dead keycodes for Linux</h3>
+
+<p>Linux generates accented characters using special <strong>dead keys</strong>; these are keys which are pressed in combination with character keys to generate accented forms of those characters. You can identify which specific dead key was used (if more than one exists) by examining the {{domxref("KeyboardEvent")}}'s associated {{event("compositionupdate")}} event's {{domxref("CompositionEvent.data", "data")}} property.</p>
+
+<p>You can find a table of the dead keys and the characters they can be used with to generate accented or otherwise special characters on Linux using GTK</p>
+
+<p>The value of {{domxref("CompositionEvent.data", "data")}} will be one of the following:</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td><strong><code>CompositionEvent.data</code></strong> value</td>
+ <td>Symbol</td>
+ <td>Comments</td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_grave</code> (0xFE50)<br>
+ <code>Qt::Key_Dead_Grave</code> (0x01001250)</td>
+ <td>`</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_acute</code> (0xFE51)<br>
+ <code>Qt::Key_Dead_Acute</code> (0x01001251)</td>
+ <td>´</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_circumflex</code> (0xFE52)<br>
+ <code>Qt::Key_Dead_Circumflex</code> (0x01001252)</td>
+ <td>ˆ</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_tilde</code> (0xFE53)<br>
+ <code>Qt::Key_Dead_Tilde</code> (0x01001253)</td>
+ <td>˜</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_perispomeni</code> (0xFE53)</td>
+ <td>͂</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_macron</code> (0xFE54)<br>
+ <code>Qt::Key_Dead_Macron</code> (0x01001254)</td>
+ <td>¯</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_breve</code> (0xFE55)<br>
+ <code>Qt::Key_Dead_Breve</code> (0x01001255)</td>
+ <td>˘</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_abovedot</code> (0xFE56)<br>
+ <code>Qt::Key_Dead_Abovedot</code> (0x01001256)</td>
+ <td>˙</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_diaeresis</code> (0xFE57)<br>
+ <code>Qt::Key_Dead_Diaeresis</code> (0x01001257)</td>
+ <td>¨</td>
+ <td>Also called an umlaut.</td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_abovering</code> (0xFE58)<br>
+ <code>Qt::Key_Dead_Abovering</code> (0x01001258)</td>
+ <td>˚</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_doubleacute</code> (0xFE59)<br>
+ <code>Qt::Key_Dead_Doubleacute</code> (0x01001259)</td>
+ <td>˝</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_caron</code> (0xFE5A)<br>
+ <code>Qt::Key_Dead_Caron</code> (0x0100125A)</td>
+ <td>ˇ</td>
+ <td>Also called a háček; used in Czech among other languages.</td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_cedilla</code> (0xFE5B)<br>
+ <code>Qt::Key_Dead_Cedilla</code> (0x0100125B)</td>
+ <td>¸</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_ogonek</code> (0xFE5C)<br>
+ <code>Qt::Key_Dead_Ogonek</code> (0x0100125C)</td>
+ <td>˛</td>
+ <td>Also called a nosinė; used in Polish and Old Irish.</td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_iota</code> (0xFE5D)<br>
+ <code>Qt::Key_Dead_Iota</code> (0x0100125D)</td>
+ <td>ͅ</td>
+ <td>Iota subscript.</td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_voiced_sound</code> (0xFE5E)<br>
+ <code>Qt::Key_Dead_Voiced_Sound</code> (0x0100125E)</td>
+ <td>゙</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_semivoiced_sound</code> (0xFE5F)<br>
+ <code>Qt::Key_Dead_Semivoiced_Sound</code> (0x0100125F)</td>
+ <td>゚</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_belowdot</code> (0xFE60)<br>
+ <code>Qt::Key_Dead_Belowdot</code> (0x01001260)</td>
+ <td>̣̣</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_hook</code> (0xFE61)<br>
+ <code>Qt::Key_Dead_Hook</code> (0x01001261)</td>
+ <td>̡</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_horn</code> (0xFE62)<br>
+ <code>Qt::Key_Dead_Horn</code> (0x01001262)</td>
+ <td>̛</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_stroke</code> (0xFE63)</td>
+ <td>̶̶</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_abovecomma</code> (0xFE64)</td>
+ <td>̓̓</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_psili</code> (0xFE64)</td>
+ <td>᾿</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_abovereversedcomma</code> (0xFE65)</td>
+ <td>ʽ</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_dasia</code> (0xFE65)</td>
+ <td>῾</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_doublegrave</code> (0xFE66)</td>
+ <td>̏</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_belowring</code> (0xFE67)</td>
+ <td>˳</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_belowmacron</code> (0xFE68)</td>
+ <td>̱</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_belowcircumflex</code> (0xFE69)</td>
+ <td>ꞈ</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_belowtilde</code> (0xFE6A)</td>
+ <td>̰</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_belowbreve</code> (0xFE6B)</td>
+ <td>̮</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_belowdiaeresis</code> (0xFE6C)</td>
+ <td>̤</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_invertedbreve</code> (0xFE6D)</td>
+ <td>̯</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_belowcomma</code> (0xFE6E)</td>
+ <td>̦</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_currency</code> (0xFE6F)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_a</code> (0xFE80)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_A</code> (0xFE81)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_e</code> (0xFE82)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_E</code> (0xFE83)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_i</code> (0xFE84)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_I</code> (0xFE85)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_o</code> (0xFE86)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_O</code> (0xFE87)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_u</code> (0xFE88)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_U</code> (0xFE89)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_small_schwa</code> (0xFE8A)</td>
+ <td>ə</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_capital_schwa</code> (0xFE8B)</td>
+ <td>Ə</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>GDK_KEY_dead_greek</code> (0xFE8C)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Function_keys">Function keys</h2>
+
+<p>While various platforms support different numbers of the general-purpose function keys, such as <kbd>F1</kbd>-<kbd>F12</kbd> (or <kbd>F1</kbd>-<kbd>F10</kbd>, or <kbd>F1</kbd>-<kbd>F15</kbd>, or...), the first few are specifically defined as follows. If more function keys are available, their names continue the pattern here by continuing to increment the numeric portion of each key's name, so that, for example, <code>"F24"</code> is a valid key value.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"F1"</code></td>
+ <td>The first general-purpose function key, <kbd>F1</kbd>.</td>
+ <td><code>VK_F1</code> (0x70)</td>
+ <td><code>kVK_F1</code> (0x7A)</td>
+ <td><code>GDK_KEY_F1</code> (0xFFBE)<br>
+ <code>GDK_KEY_KP_F1</code> (0xFF91)<br>
+ <code>Qt::Key_F1</code> (0x01000030)</td>
+ <td><code>KEYCODE_F1</code> (131)</td>
+ </tr>
+ <tr>
+ <td><code>"F2"</code></td>
+ <td>The <kbd>F2</kbd> key.</td>
+ <td><code>VK_F2</code> (0x71)</td>
+ <td><code>kVK_F2</code> (0x78)</td>
+ <td><code>GDK_KEY_F2</code> (0xFFBF)<br>
+ <code>GDK_KEY_KP_F2</code> (0xFF92)<br>
+ <code>Qt::Key_F2</code> (0x01000031)</td>
+ <td><code>KEYCODE_F2</code> (132)</td>
+ </tr>
+ <tr>
+ <td><code>"F3"</code></td>
+ <td>The <kbd>F3</kbd> key.</td>
+ <td><code>VK_F3</code> (0x72)</td>
+ <td><code>kVK_F3</code> (0x63)</td>
+ <td><code>GDK_KEY_F3</code> (0xFFC0)<br>
+ <code>GDK_KEY_KP_F3</code> (0xFF93)<br>
+ <code>Qt::Key_F3</code> (0x01000032)</td>
+ <td><code>KEYCODE_F3</code> (133)</td>
+ </tr>
+ <tr>
+ <td><code>"F4"</code></td>
+ <td>The <kbd>F4</kbd> key.</td>
+ <td><code>VK_F4</code> (0x73)</td>
+ <td><code>kVK_F4</code> (0x76)</td>
+ <td><code>GDK_KEY_F4</code> (0xFFC1)<br>
+ <code>GDK_KEY_KP_F4</code> (0xFF94)<br>
+ <code>Qt::Key_F4</code> (0x01000033)</td>
+ <td><code>KEYCODE_F4</code> (134)</td>
+ </tr>
+ <tr>
+ <td><code>"F5"</code></td>
+ <td>The <kbd>F5</kbd> key.</td>
+ <td><code>VK_F5</code> (0x74)</td>
+ <td><code>kVK_F5</code> (0x60)</td>
+ <td><code>GDK_KEY_F5</code> (0xFFC2)<br>
+ <code>Qt::Key_F5</code> (0x01000034)</td>
+ <td><code>KEYCODE_F5</code> (135)</td>
+ </tr>
+ <tr>
+ <td><code>"F6"</code></td>
+ <td>The <kbd>F6</kbd> key.</td>
+ <td><code>VK_F6</code> (0x75)</td>
+ <td><code>kVK_F6</code> (0x61)</td>
+ <td><code>GDK_KEY_F6</code> (0xFFC3)<br>
+ <code>Qt::Key_F6</code> (0x01000035)</td>
+ <td><code>KEYCODE_F6</code> (136)</td>
+ </tr>
+ <tr>
+ <td><code>"F7"</code></td>
+ <td>The <kbd>F7</kbd> key.</td>
+ <td><code>VK_F7</code> (0x76)</td>
+ <td><code>kVK_F7</code> (0x62)</td>
+ <td><code>GDK_KEY_F7</code> (0xFFC4)<br>
+ <code>Qt::Key_F7</code> (0x01000036)</td>
+ <td><code>KEYCODE_F7</code> (137)</td>
+ </tr>
+ <tr>
+ <td><code>"F8"</code></td>
+ <td>The <kbd>F8</kbd> key.</td>
+ <td><code>VK_F8</code> (0x77)</td>
+ <td><code>kVK_F8</code> (0x64)</td>
+ <td><code>GDK_KEY_F8</code> (0xFFC5)<br>
+ <code>Qt::Key_F8</code> (0x01000037)</td>
+ <td><code>KEYCODE_F8</code> (138)</td>
+ </tr>
+ <tr>
+ <td><code>"F9"</code></td>
+ <td>The <kbd>F9</kbd> key.</td>
+ <td><code>VK_F9</code> (0x78)</td>
+ <td><code>kVK_F9</code> (0x65)</td>
+ <td><code>GDK_KEY_F9</code> (0xFFC6)<br>
+ <code>Qt::Key_F9</code> (0x01000038)</td>
+ <td><code>KEYCODE_F9</code> (139)</td>
+ </tr>
+ <tr>
+ <td><code>"F10"</code></td>
+ <td>The <kbd>F10</kbd> key.</td>
+ <td><code>VK_F10</code> (0x79)</td>
+ <td><code>kVK_F10</code> (0x6D)</td>
+ <td><code>GDK_KEY_F10</code> (0xFFC7)<br>
+ <code>Qt::Key_F10</code> (0x01000039)</td>
+ <td><code>KEYCODE_F10</code> (140)</td>
+ </tr>
+ <tr>
+ <td><code>"F11"</code></td>
+ <td>The <kbd>F11</kbd> key.</td>
+ <td><code>VK_F11</code> (0x7A)</td>
+ <td><code>kVK_F11</code> (0x67)</td>
+ <td><code>GDK_KEY_F11</code> (0xFFC8)<br>
+ <code>Qt::Key_F11</code> (0x0100003A)</td>
+ <td><code>KEYCODE_F11</code> (141)</td>
+ </tr>
+ <tr>
+ <td><code>"F12"</code></td>
+ <td>The <kbd>F12</kbd> key.</td>
+ <td><code>VK_F12</code> (0x7B)</td>
+ <td><code>kVK_F12</code> (0x6F)</td>
+ <td><code>GDK_KEY_F12</code> (0xFFC9)<br>
+ <code>Qt::Key_F12</code> (0x0100003B)</td>
+ <td><code>KEYCODE_F12</code> (142)</td>
+ </tr>
+ <tr>
+ <td><code>"F13"</code></td>
+ <td>The <kbd>F13</kbd> key.</td>
+ <td><code>VK_F13</code> (0x7C)</td>
+ <td><code>kVK_F13</code> (0x69)</td>
+ <td><code>GDK_KEY_F13</code> (0xFFCA)<br>
+ <code>Qt::Key_F13</code> (0x0100003C)</td>
+ <td><code>KEYCODE_F13</code></td>
+ </tr>
+ <tr>
+ <td><code>"F14"</code></td>
+ <td>The <kbd>F14</kbd> key.</td>
+ <td><code>VK_F14</code> (0x7D)</td>
+ <td><code>kVK_F14</code> (0x6B)</td>
+ <td><code>GDK_KEY_F14</code> (0xFFCB)<br>
+ <code>Qt::Key_F1</code>4 (0x0100003D)</td>
+ <td><code>KEYCODE_F14</code></td>
+ </tr>
+ <tr>
+ <td><code>"F15"</code></td>
+ <td>The <kbd>F15</kbd> key.</td>
+ <td><code>VK_F15</code> (0x7E)</td>
+ <td><code>kVK_F15</code> (0x71)</td>
+ <td><code>GDK_KEY_F15</code> (0xFFCC)<br>
+ <code>Qt::Key_F1</code>5 (0x0100003E)</td>
+ <td><code>KEYCODE_F15</code></td>
+ </tr>
+ <tr>
+ <td><code>"F16"</code></td>
+ <td>The <kbd>F16</kbd> key.</td>
+ <td><code>VK_F16</code> (0x7F)</td>
+ <td><code>kVK_F16</code> (0x6A)</td>
+ <td><code>GDK_KEY_F16</code> (0xFFCD)<br>
+ <code>Qt::Key_F1</code>6 (0x0100003F)</td>
+ <td><code>KEYCODE_F16</code></td>
+ </tr>
+ <tr>
+ <td><code>"F17"</code></td>
+ <td>The <kbd>F17</kbd> key.</td>
+ <td><code>VK_F17</code> (0x80)</td>
+ <td><code>kVK_F17</code> (0x40)</td>
+ <td><code>GDK_KEY_F17</code> (0xFFCE)<br>
+ <code>Qt::Key_F1</code>7 (0x01000040)</td>
+ <td><code>KEYCODE_F17</code></td>
+ </tr>
+ <tr>
+ <td><code>"F18"</code></td>
+ <td>The <kbd>F18</kbd> key.</td>
+ <td><code>VK_F18</code> (0x81)</td>
+ <td><code>kVK_F18</code> (0x4F)</td>
+ <td><code>GDK_KEY_F18</code> (0xFFCF)<br>
+ <code>Qt::Key_F1</code>8 (0x01000041)</td>
+ <td><code>KEYCODE_F18</code></td>
+ </tr>
+ <tr>
+ <td><code>"F19"</code></td>
+ <td>The <kbd>F19</kbd> key.</td>
+ <td><code>VK_F19</code> (0x82)</td>
+ <td><code>kVK_F19</code> (0x50)</td>
+ <td><code>GDK_KEY_F19</code> (0xFFD0)<br>
+ <code>Qt::Key_F1</code>9 (0x01000042)</td>
+ <td><code>KEYCODE_F19</code></td>
+ </tr>
+ <tr>
+ <td><code>"F20"</code></td>
+ <td>The <kbd>F20</kbd> key.</td>
+ <td><code>VK_F20</code> (0x83)</td>
+ <td><code>kVK_F20</code> (0x5A)</td>
+ <td><code>GDK_KEY_F20</code> (0xFFD1)<br>
+ <code>Qt::Key_F20</code> (0x01000043)</td>
+ <td><code>KEYCODE_F20</code></td>
+ </tr>
+ <tr>
+ <td><code>"Soft1"</code></td>
+ <td>The first general-purpose virtual function key.</td>
+ <td></td>
+ <td></td>
+ <td><code>Qt::Key_Context1</code> (0x01100000)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Soft2"</code></td>
+ <td>The second general-purpose virtual function key.</td>
+ <td></td>
+ <td></td>
+ <td><code>Qt::Key_Context2</code> (0x01100001)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Soft3"</code></td>
+ <td>The third general-purpose virtual function key.</td>
+ <td></td>
+ <td></td>
+ <td><code>Qt::Key_Context3</code> (0x01100002)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Soft4"</code></td>
+ <td>The fourth general-purpose virtual function key.</td>
+ <td></td>
+ <td></td>
+ <td><code>Qt::Key_Context4</code> (0x01100003)</td>
+ <td></td>
+ </tr>
+ </thead>
+</table>
+
+<h2 id="Phone_keys">Phone keys</h2>
+
+<p>These keys represent buttons which commonly exist on modern smartphones.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"AppSwitch"</code></td>
+ <td>Presents a list of recently-used applications which lets the user change apps quickly.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_APP_SWITCH</code> (181)</td>
+ </tr>
+ <tr>
+ <td><code>"Call"</code></td>
+ <td>The <kbd>Call</kbd> key; dials the number which has been entered.</td>
+ <td></td>
+ <td></td>
+ <td><code>Qt::Key_Call</code> (0x01100004)</td>
+ <td><code>KEYCODE_CALL</code> (5)</td>
+ </tr>
+ <tr>
+ <td><code>"Camera"</code></td>
+ <td>The <kbd>Camera</kbd> key; activates the camera.</td>
+ <td></td>
+ <td></td>
+ <td><code>Qt::Key_Camera</code> (0x01100020)</td>
+ <td><code>KEYCODE_CAMERA</code> (27)</td>
+ </tr>
+ <tr>
+ <td><code>"CameraFocus"</code></td>
+ <td>The <kbd>Focus</kbd> key; focuses the camera.</td>
+ <td></td>
+ <td></td>
+ <td><code>Qt::Key_CameraFocus</code> (0x01100021)</td>
+ <td><code>KEYCODE_FOCUS</code> (80)</td>
+ </tr>
+ <tr>
+ <td><code>"EndCall"</code></td>
+ <td>The <kbd>End Call</kbd> or <kbd>Hang Up</kbd> button.</td>
+ <td></td>
+ <td></td>
+ <td><code>Qt::Key_Hangup</code> (0x01100005)</td>
+ <td><code>KEYCODE_ENDCALL</code> (6)</td>
+ </tr>
+ <tr>
+ <td><code>"GoBack"</code></td>
+ <td>The <kbd>Back</kbd> button.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_BACK</code> (4)</td>
+ </tr>
+ <tr>
+ <td><code>"GoHome"</code> [1]</td>
+ <td>The <kbd>Home</kbd> button, which takes the user to the phone's main screen (usually an application launcher).</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_HOME</code> (3)</td>
+ </tr>
+ <tr>
+ <td><code>"HeadsetHook"</code></td>
+ <td>The <kbd>Headset Hook</kbd> key. This is typically actually a button on the headset which is used to hang up calls and play or pause media.</td>
+ <td></td>
+ <td></td>
+ <td><code>Qt::Key_ToggleCallHangup</code> (0x01100007)</td>
+ <td><code>KEYCODE_HEADSETHOOK</code> (79)</td>
+ </tr>
+ <tr>
+ <td><code>"LastNumberRedial"</code></td>
+ <td>The <kbd>Redial</kbd> button, which redials the last-called number.</td>
+ <td></td>
+ <td></td>
+ <td><code>Qt::Key_LastNumberRedial</code> (0x01100009)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Notification"</code></td>
+ <td>The <kbd>Notification</kbd> key.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_NOTIFICATION</code> (83)</td>
+ </tr>
+ <tr>
+ <td><code>"MannerMode"</code></td>
+ <td>A button which cycles among the notification modes: silent, vibrate, ring, and so forth.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_MANNER_MODE</code> (205)</td>
+ </tr>
+ <tr>
+ <td><code>"VoiceDial"</code></td>
+ <td>The <kbd>Voice Dial</kbd> key. Initiates voice dialing.</td>
+ <td></td>
+ <td></td>
+ <td><code>Qt::Key_VoiceDial</code> (0x01100008)</td>
+ <td><code>KEYCODE_VOICE_ASSIST</code> (231)</td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] Prior to Firefox 37, the Home button generated a key code of <code>"Exit"</code>. Starting in Firefox 37, the button generates the key code <code>"MozHomeScreen"</code>.</p>
+
+<h2 id="Multimedia_keys">Multimedia keys</h2>
+
+<p>The multimedia keys are extra buttons or keys for controlling media devices, found on some keyboards.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"ChannelDown"</code></td>
+ <td>Switches to the previous channel.</td>
+ <td><code>APPCOMMAND_MEDIA_CHANNEL_DOWN</code></td>
+ <td></td>
+ <td><code>Qt::Key_ChannelDown</code> (0x01000119)</td>
+ <td><code>KEYCODE_CHANNEL_DOWN</code> (167)</td>
+ </tr>
+ <tr>
+ <td><code>"ChannelUp"</code></td>
+ <td>Switches to the next channel.</td>
+ <td><code>APPCOMMAND_MEDIA_CHANNEL_UP</code></td>
+ <td></td>
+ <td><code>Qt::Key_ChannelUp</code> (0x01000118)</td>
+ <td><code>KEYCODE_CHANNEL_UP</code> (166)</td>
+ </tr>
+ <tr>
+ <td><code>"MediaFastForward"</code> [2]</td>
+ <td>Starts, continues, or increases the speed of fast forwarding the media.</td>
+ <td><code>APPCOMMAND_MEDIA_FAST_FORWARD</code></td>
+ <td></td>
+ <td><code>GDK_KEY_AudioForward (0x1008FF97)<br>
+ Qt:Key_AudioForward</code> (0x01000102)</td>
+ <td><code>KEYCODE_MEDIA_FAST_FORWARD</code> (90)</td>
+ </tr>
+ <tr>
+ <td><code>"MediaPause"</code></td>
+ <td>Pauses the currently playing media. Some older applications use simply "Pause" but this is not correct.</td>
+ <td><code>APPCOMMAND_MEDIA_PAUSE</code></td>
+ <td></td>
+ <td><code>GDK_KEY_AudioPause</code> (0x1008FF31)<br>
+ <code>Qt::Key_MediaPause</code> (0x1000085)</td>
+ <td><code>KEYCODE_MEDIA_PAUSE</code> (127)</td>
+ </tr>
+ <tr>
+ <td><code>"MediaPlay"</code></td>
+ <td>Starts or continues playing media at normal speed, if not already doing so. Has no effect otherwise.</td>
+ <td><code>APPCOMMAND_MEDIA_PLAY</code></td>
+ <td></td>
+ <td><code>GDK_KEY_AudioPlay</code> (0x1008FF14)</td>
+ <td><code>KEYCODE_MEDIA_PLAY</code><code> (126)</code></td>
+ </tr>
+ <tr>
+ <td><code>"MediaPlayPause"</code></td>
+ <td>Toggles between playing and pausing the current media.</td>
+ <td><code>VK_MEDIA_PLAY_PAUSE</code> (0xB3)<br>
+ <code>APPCOMMAND_MEDIA_PLAY_PAUSE</code></td>
+ <td></td>
+ <td><code>Qt::Key_MediaTogglePlayPause</code> (0x1000086)</td>
+ <td><code>KEYCODE_MEDIA_PLAY_PAUSE</code> (85)</td>
+ </tr>
+ <tr>
+ <td><code>"MediaRecord"</code></td>
+ <td>Starts or resumes recording media.</td>
+ <td><code>APPCOMMAND_MEDIA_RECORD</code></td>
+ <td></td>
+ <td><code>GDK_KEY_AudioRecord</code> (0x1008FF1C)<br>
+ <code>Qt::Key_MediaRecord</code> (0x01000084)</td>
+ <td><code>KEYCODE_MEDIA_RECORD</code><code> (130)</code></td>
+ </tr>
+ <tr>
+ <td><code>"MediaRewind"</code></td>
+ <td>Starts, continues, or increases the speed of rewinding the media.</td>
+ <td><code>APPCOMMAND_MEDIA_REWIND</code></td>
+ <td></td>
+ <td><code>GDK_KEY_AudioRewind</code> (0x1008FF3E)<br>
+ <code>Qt::Key_AudioRewind</code> (0x010000C5)</td>
+ <td><code>KEYCODE_MEDIA_REWIND</code><code> (89)</code></td>
+ </tr>
+ <tr>
+ <td><code>"MediaStop"</code></td>
+ <td>Stops the current media activity (such as playing, recording, pausing, forwarding, or rewinding). Has no effect if the media is currently stopped already.</td>
+ <td><code>VK_MEDIA_STOP</code> (0xB2)<br>
+ <code>APPCOMMAND_MEDIA_STOP</code></td>
+ <td></td>
+ <td><code>GDK_KEY_AudioStop</code> (0x1008FF15)<br>
+ <code>Qt::Key_MediaStop</code> (0x01000081)</td>
+ <td><code>KEYCODE_MEDIA_STOP</code> (86)</td>
+ </tr>
+ <tr>
+ <td><code>"MediaTrackNext"</code> [1]</td>
+ <td>Seeks to the next media or program track.</td>
+ <td><code>VK_MEDIA_NEXT_TRACK</code> (0xB0)<br>
+ <code>APPCOMMAND_MEDIA_NEXTTRACK</code></td>
+ <td></td>
+ <td><code>GDK_KEY_AudioNext</code> (0x1008FF17)<br>
+ <code>Qt::Key_MediaNext</code> (0x01000083)</td>
+ <td><code>KEYCODE_MEDIA_NEXT</code> (87)</td>
+ </tr>
+ <tr>
+ <td><code>"MediaTrackPrevious"</code> [1]</td>
+ <td>Seeks to the previous media or program track.</td>
+ <td><code>VK_MEDIA_PREV_TRACK</code> (0xB1)<br>
+ <code>APPCOMMAND_MEDIA_PREVIOUSTRACK</code></td>
+ <td></td>
+ <td><code>GDK_KEY_AudioPrev</code> (0x1008FF16)<br>
+ <code>Qt::Key_MediaPrevious</code> (0x01000082)</td>
+ <td><code>KEYCODE_MEDIA_PREVIOUS</code> (88)</td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] Internet Explorer, Edge, and Firefox (36 and earlier) use <code>"MediaNextTrack"</code> and <code>"MediaPreviousTrack"</code> instead of <code>"MediaTrackNext"</code> and <code>"MediaTrackPrevious"</code>.</p>
+
+<p>[2] Prior to Firefox 37, Firefox generated the key code <code>"FastFwd"</code> on some platforms and <code>"Unidentified"</code> on others instead of <code>"MediaFastForward"</code>.</p>
+
+<h2 id="Audio_control_keys">Audio control keys</h2>
+
+<p>These media keys are used specifically for controlling audio.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"AudioBalanceLeft"</code></td>
+ <td>Adjusts audio balance toward the left.</td>
+ <td><code>VK_AUDIO_BALANCE_LEFT</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"AudioBalanceRight"</code></td>
+ <td>Adjusts audio balance twoard the right.</td>
+ <td><code>VK_AUDIO_BALANCE_RIGHT</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"AudioBassDown"</code></td>
+ <td>Decreases the amount of bass.</td>
+ <td><code>APPCOMMAND_BASS_DOWN</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"AudioBassBoostDown"</code></td>
+ <td>Reduces bass boosting or cycles downward through bass boost modes or states.</td>
+ <td><code>VK_BASS_BOOST_DOWN</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"AudioBassBoostToggle"</code></td>
+ <td>Toggles bass boosting on and off.</td>
+ <td><code>APPCOMMAND_BASS_BOOST</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"AudioBassBoostUp"</code></td>
+ <td>Increases the amoung of bass boosting, or cycles upward through a set of bass boost modes or states.</td>
+ <td><code>VK_BASS_BOOST_UP</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"AudioBassUp"</code></td>
+ <td>Increases the amount of bass.</td>
+ <td><code>APPCOMMAND_BASS_UP</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"AudioFaderFront"</code></td>
+ <td>Adjusts the audio fader toward the front.</td>
+ <td><code>VK_FADER_FRONT</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"AudioFaderRear"</code></td>
+ <td>Adjustts the audio fader toward the rear.</td>
+ <td><code>VK_FADER_REAR</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"AudioSurroundModeNext"</code></td>
+ <td>Selects the next available surround sound mode.</td>
+ <td><code>VK_SURROUND_MODE_NEXT</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"AudioTrebleDown"</code></td>
+ <td>Decreases the amount of treble.</td>
+ <td><code>APPCOMMAND_TREBLE_DOWN</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"AudioTrebleUp"</code></td>
+ <td>Increases the amount of treble.</td>
+ <td><code>APPCOMMAND_TREBLE_UP</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"AudioVolumeDown" [1]</code></td>
+ <td>Decreases the audio volume.</td>
+ <td><code>VK_VOLUME_DOWN</code> (0xAE)<br>
+ <code>APPCOMMAND_VOLUME_DOWN</code></td>
+ <td><code>kVK_VolumeDown</code> (0x49)</td>
+ <td><code>GDK_KEY_AudioLowerVolume</code> (0x1008FF11)<br>
+ <code>Qt::Key_VolumeDown</code> (0x01000070)</td>
+ <td><code>KEYCODE_VOLUME_DOWN</code> (25)</td>
+ </tr>
+ <tr>
+ <td><code>"AudioVolumeMute" [1]</code></td>
+ <td>Mutes the audio.</td>
+ <td><code>VK_VOLUME_MUTE</code> (0xAD)<br>
+ <code>APPCOMMAND_VOLUME_MUTE</code></td>
+ <td><code>kVK_Mute</code> (0x4A)</td>
+ <td><code>GDK_KEY_AudioMute</code> (0x1008FF12)<br>
+ <code>Qt::Key_VolumeMute</code> (0x01000071)</td>
+ <td><code>KEYCODE_VOLUME_MUTE</code> (164)</td>
+ </tr>
+ <tr>
+ <td><code>"AudioVolumeUp" [1]</code></td>
+ <td>Increases the audio volume.</td>
+ <td><code>VK_VOLUME_UP</code> (0xAF)<br>
+ <code>APPCOMMAND_VOLUME_UP</code></td>
+ <td><code>kVK_VolumeUp</code> (0x48)</td>
+ <td><code>GDK_KEY_AudioRaiseVolume</code> (0x1008FF13)<br>
+ <code>Qt::Key_VolumeUp</code> (0x01000072)</td>
+ <td><code>KEYCODE_VOLUME_UP</code> (24)</td>
+ </tr>
+ <tr>
+ <td><code>"MicrophoneToggle"</code></td>
+ <td>Toggles the microphone on and off.</td>
+ <td><code>APPCOMMAND_MIC_ON_OFF_TOGGLE</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"MicrophoneVolumeDown"</code></td>
+ <td>Decreases the microphone's input volume.</td>
+ <td><code>APPCOMMAND_MICROPHONE_VOLUME_DOWN</code></td>
+ <td></td>
+ <td><code>Qt::Key_MicVolumeDown</code> (0x0100011E)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"MicrophoneVolumeMute"</code></td>
+ <td>Mutes the microphone input.</td>
+ <td><code>APPCOMMAND_MICROPHONE_VOLUME_MUTE</code></td>
+ <td></td>
+ <td><code>GDK_KEY_AudioMicMute</code> (0x1008FFB2)<br>
+ <code>Qt::Key_MicMute</code> (0x01000113)</td>
+ <td><code>KEYCODE_MUTE</code> (91)</td>
+ </tr>
+ <tr>
+ <td><code>"MicrophoneVolumeUp"</code></td>
+ <td>Increases the microphone's input volume.</td>
+ <td><code>APPCOMMAND_MICROPHONE_VOLUME_UP</code></td>
+ <td></td>
+ <td><code>Qt::Key_MicVolumeUp</code> (0x0100011D)</td>
+ <td></td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] Internet Explorer, Edge, and Firefox (48 and earlier) use <code>"VolumeUp"</code>, <code>"VolumeDown"</code>, and <code>"VolumeMute"</code> instead of <code>"AudioVolumeUp"</code>, <code>"AudioVolumeDown"</code>, and <code>"AudioVolumeMute"</code>. In Firefox 49 they were updated to match the latest specification. The old names are still used on <a href="/en-US/docs/Mozilla/B2G_OS">Boot to Gecko</a>.</p>
+
+<h2 id="TV_control_keys">TV control keys</h2>
+
+<p>These key values represent buttons or keys present on television devices, or computers or phones which have TV support.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"TV"</code> [1]</td>
+ <td>Switches into TV viewing mode.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV</code> (170)</td>
+ </tr>
+ <tr>
+ <td><code>"TV3DMode"</code></td>
+ <td>Toggles 3D TV mode on and off.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_3D_MODE</code> (206)</td>
+ </tr>
+ <tr>
+ <td><code>"TVAntennaCable"</code></td>
+ <td>Toggles between antenna and cable inputs.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_ANTENNA_CABLE</code> (242)</td>
+ </tr>
+ <tr>
+ <td><code>"TVAudioDescription"</code></td>
+ <td>Toggles audio description mode on and off.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_AUDIO_DESCRIPTION</code> (252)</td>
+ </tr>
+ <tr>
+ <td><code>"TVAudioDescriptionMixDown"</code></td>
+ <td>Decreases trhe audio description's mixing volume; reduces the volume of the audio descriptions relative to the program sound.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN</code> (254)</td>
+ </tr>
+ <tr>
+ <td><code>"TVAudioDescriptionMixUp"</code></td>
+ <td>Increases the audio description's mixing volume; increases the volume of the audio descriptions relative to the program sound.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP</code> (253)</td>
+ </tr>
+ <tr>
+ <td><code>"TVContentsMenu"</code></td>
+ <td>Displays or hides the media contents available for playback (this may be a channel guide showing the currently airing programs, or a list of media files to play).</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_CONTENTS_MENU</code> (256)</td>
+ </tr>
+ <tr>
+ <td><code>"TVDataService"</code></td>
+ <td>Displays or hides the TV's data service menu.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_DATA_SERVICE</code> (230)</td>
+ </tr>
+ <tr>
+ <td><code>"TVInput"</code> [2]</td>
+ <td>Cycles the input mode on an external TV.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_INPUT</code> (178)</td>
+ </tr>
+ <tr>
+ <td><code>"TVInputComponent1"</code></td>
+ <td>Switches to the input "Component 1."</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_INPUT_COMPONENT_1</code> (249)</td>
+ </tr>
+ <tr>
+ <td><code>"TVInputComponent2"</code></td>
+ <td>Switches to the input "Component 2."</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_INPUT_COMPONENT_2</code> (250)</td>
+ </tr>
+ <tr>
+ <td><code>"TVInputComposite1"</code></td>
+ <td>Switches to the input "Composite 1."</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_INPUT_COMPOSITE_1</code> (247)</td>
+ </tr>
+ <tr>
+ <td><code>"TVInputComposite2"</code></td>
+ <td>Switches to the input "Composite 2."</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_INPUT_COMPOSITE_2</code> (248)</td>
+ </tr>
+ <tr>
+ <td><code>"TVInputHDMI1"</code></td>
+ <td>Switches to the input "HDMI 1."</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_INPUT_HDMI_1</code> (243)</td>
+ </tr>
+ <tr>
+ <td><code>"TVInputHDMI2"</code></td>
+ <td>Switches to the input "HDMI 2."</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_INPUT_HDMI_2</code> (244)</td>
+ </tr>
+ <tr>
+ <td><code>"TVInputHDMI3"</code></td>
+ <td>Switches to the input "HDMI 3."</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_INPUT_HDMI_3</code> (245)</td>
+ </tr>
+ <tr>
+ <td><code>"TVInputHDMI4"</code></td>
+ <td>Switches to the input "HDMI 4."</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_INPUT_HDMI_4</code> (246)</td>
+ </tr>
+ <tr>
+ <td><code>"TVInputVGA1"</code></td>
+ <td>Switches to the input "VGA 1."</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_INPUT_VGA_1</code> (251)</td>
+ </tr>
+ <tr>
+ <td><code>"TVMediaContext"</code></td>
+ <td>The Media Context menu key.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_MEDIA_CONTEXT_MENU</code> (257)</td>
+ </tr>
+ <tr>
+ <td><code>"TVNetwork"</code></td>
+ <td>Toggle the TV's network connection on and off.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_NETWORK</code> (241)</td>
+ </tr>
+ <tr>
+ <td><code>"TVNumberEntry"</code></td>
+ <td>Put the TV into number entry mode.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_NUMBER_ENTRY</code> (234)</td>
+ </tr>
+ <tr>
+ <td><code>"TVPower"</code> [2]</td>
+ <td>The device's power button.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_POWER</code> (177)</td>
+ </tr>
+ <tr>
+ <td><code>"TVRadioService"</code></td>
+ <td>Radio button.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_RADIO_SERVICE</code> (232)</td>
+ </tr>
+ <tr>
+ <td><code>"TVSatellite"</code></td>
+ <td>Satellite button.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_SATELLITE</code> (237)</td>
+ </tr>
+ <tr>
+ <td><code>"TVSatelliteBS"</code></td>
+ <td>Broadcast Satellite button.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_SATELLITE_BS</code> (238)</td>
+ </tr>
+ <tr>
+ <td><code>"TVSatelliteCS"</code></td>
+ <td>Communication Satellite button.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_SATELLITE_CS</code> (239)</td>
+ </tr>
+ <tr>
+ <td><code>"TVSatelliteToggle"</code></td>
+ <td>Toggles among available satellites.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_SATELLITE_SERVICE</code> (240)</td>
+ </tr>
+ <tr>
+ <td><code>"TVTerrestrialAnalog"</code></td>
+ <td>Selects analog terrestrial television service (analog cable or antenna reception).</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_TERRESTRIAL_ANALOG</code> (235)</td>
+ </tr>
+ <tr>
+ <td><code>"TVTerrestrialDigital"</code></td>
+ <td>Selects digital terrestrial television service (digital cable or antenna receiption).</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_TERRESTRIAL_DIGITAL</code> (236)</td>
+ </tr>
+ <tr>
+ <td><code>"TVTimer"</code></td>
+ <td>Timer programming button.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_TIMER_PROGRAMMING</code> (258)</td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] Firefox added proper support for the <code>"TV"</code> key in Firefox 37; before that, this key generated the key code <code>"Live"</code>.</p>
+
+<p>[2] These keys were <code>"Unidentified"</code> until Firefox 37.</p>
+
+<h2 id="Media_controller_keys">Media controller keys</h2>
+
+<p>Because modern remote controls for media devices often include buttons beyond the basic controls covered elsewhere in this document, key values are defined for a broad array of these additional buttons.</p>
+
+<p>The values below are derived in part form a number of consumer electronics technical specifications:</p>
+
+<ul>
+ <li><a href="http://atsc.org/standard/a100-dtv-application-software-environment-level-1-dase-1/">DTV Application Software Environment</a> (part of the {{interwiki("wikipedia", "ATSC")}} specification)</li>
+ <li><a href="http://www.cablelabs.com/specifications/OC-SP-OCAP1.1.3-100603.pdf">Open Cable Application Platform 1.1.3</a></li>
+ <li><a href="http://www.ce.org/Standards/Standard-Listings/R7-Home-Network-Committee/CEA-2014-B-(ANSI%29.aspx">ANSI/CEA-2014-B</a>: Web-based Protocol and Framework for Remote User Interface on UPnP™ Networks and the Internet</li>
+ <li><a href="http://developer.android.com/reference/android/view/KeyEvent.html">Android KeyEvent key code values</a></li>
+</ul>
+
+<div class="note">
+<p>Remote controls typically include keys whose values are already defined elsewhere, such as under {{anch("Multimedia keys")}} or {{anch("Audio control keys")}}. Those keys' values will match what's documented in those tables.</p>
+</div>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"AVRInput"</code> [3]</td>
+ <td>Changes the input mode on an external audio/video receiver (AVR) unit.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_AVR_INPUT</code> (182)</td>
+ </tr>
+ <tr>
+ <td><code>"AVRPower"</code> [3]</td>
+ <td>Toggles the power on an external AVR unit.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_AVR_POWER</code> (181)</td>
+ </tr>
+ <tr>
+ <td><code>"ColorF0Red"</code> [3]</td>
+ <td>General-purpose media function key, color-coded red; this has index 0 among the colored keys.</td>
+ <td><code>VK_COLORED_KEY_0</code></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_PROG_RED</code> (183)</td>
+ </tr>
+ <tr>
+ <td><code>"ColorF1Green"</code> [3]</td>
+ <td>General-purpose media funciton key, color-coded green; this has index 1 among the colored keys.</td>
+ <td><code>VK_COLORED_KEY_1</code></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_PROG_GREEN</code> (184)</td>
+ </tr>
+ <tr>
+ <td><code>"ColorF2Yellow"</code> [3]</td>
+ <td>General-purpose media funciton key, color-coded yellow; this has index 2 among the colored keys.</td>
+ <td><code>VK_COLORED_KEY_2</code></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_PROG_YELLOW</code> (185)</td>
+ </tr>
+ <tr>
+ <td><code>"ColorF3Blue"</code> [3]</td>
+ <td>General-purpose media funciton key, color-coded blue; this has index 3 among the colored keys.</td>
+ <td><code>VK_COLORED_KEY_3</code></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_PROG_BLUE</code> (186)</td>
+ </tr>
+ <tr>
+ <td><code>"ColorF4Grey"</code></td>
+ <td>General-purpose media funciton key, color-coded grey; this has index 4 among the colored keys.</td>
+ <td><code>VK_COLORED_KEY_4</code></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_PROG_GREY</code></td>
+ </tr>
+ <tr>
+ <td><code>"ColorF5Brown"</code></td>
+ <td>General-purpose media funciton key, color-coded brown; this has index 5 among the colored keys.</td>
+ <td><code>VK_COLORED_KEY_5</code></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_PROG_BROWN</code></td>
+ </tr>
+ <tr>
+ <td><code>"ClosedCaptionToggle"</code></td>
+ <td>Toggles closed captioning on and off.</td>
+ <td><code>VK_CC</code></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_CAPTIONS</code> (175)</td>
+ </tr>
+ <tr>
+ <td><code>"Dimmer"</code></td>
+ <td>Adjusts the brightness of the device by toggling between two brightness levels <em>or</em> by cycling among multiple brightness levels.</td>
+ <td><code>VK_DIMMER</code></td>
+ <td></td>
+ <td><code>GDK_KEY_BrightnessAdjust</code> (0x1008FF3B)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"DisplaySwap"</code></td>
+ <td>Cycles among video sources.</td>
+ <td><code>VK_DISPLAY_SWAP</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"DVR"</code></td>
+ <td>Switches the input source to the Digital Video Recorder (DVR).</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_DVR</code> (173)</td>
+ </tr>
+ <tr>
+ <td><code>"Exit"</code></td>
+ <td>The Exit button, which exits the curreent application or menu.</td>
+ <td><code>VK_EXIT</code></td>
+ <td></td>
+ <td><code>Qt::Key_Exit</code> (0x0102000a)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FavoriteClear0"</code></td>
+ <td>Clears the program or content stored in the first favorites list slot.</td>
+ <td><code>VK_CLEAR_FAVORITE_0</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FavoriteClear1"</code></td>
+ <td>Clears the program or content stored in the second favorites list slot.</td>
+ <td><code>VK_CLEAR_FAVORITE_1</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FavoriteClear2"</code></td>
+ <td>Clears the program or content stored in the third favorites list slot.</td>
+ <td><code>VK_CLEAR_FAVORITE_2</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FavoriteClear3"</code></td>
+ <td>Clears the program or content stored in the fourth favorites list slot.</td>
+ <td><code>VK_CLEAR_FAVORITE_3</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FavoriteRecall0"</code></td>
+ <td>Selects (recalls) the program or content stored in the first favorites list slot.</td>
+ <td><code>VK_RECALL_FAVORITE_0</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FavoriteRecall1"</code></td>
+ <td>Selects (recalls) the program or content stored in the second favorites list slot.</td>
+ <td><code>VK_RECALL_FAVORITE_1</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FavoriteRecall2"</code></td>
+ <td>Selects (recalls) the program or content stored in the third favorites list slot.</td>
+ <td><code>VK_RECALL_FAVORITE_2</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FavoriteRecall3"</code></td>
+ <td>Selects (recalls) the program or content stored in the fourth favorites list slot.</td>
+ <td><code>VK_RECALL_FAVORITE_3</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FavoriteStore0"</code></td>
+ <td>Stores the current program or content into the first favorites list slot.</td>
+ <td><code>VK_STORE_FAVORITE_0</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FavoriteStore1"</code></td>
+ <td>Stores the current program or content into the second favorites list slot.</td>
+ <td><code>VK_STORE_FAVORITE_1</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FavoriteStore2"</code></td>
+ <td>Stores the current program or content into the third favorites list slot.</td>
+ <td><code>VK_STORE_FAVORITE_2</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"FavoriteStore3"</code></td>
+ <td>Stores the current program or content into the fourth favorites list slot.</td>
+ <td><code>VK_STORE_FAVORITE_3</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Guide"</code></td>
+ <td>Toggles the display of the program or content guide.</td>
+ <td><code>VK_GUIDE</code></td>
+ <td></td>
+ <td><code>Qt::Key_Guide</code> (0x0100011A)</td>
+ <td><code>KEYCODE_GUIDE</code> (172)</td>
+ </tr>
+ <tr>
+ <td><code>"GuideNextDay"</code></td>
+ <td>If the guide is currently displayed, this button tells the guide to display the next day's content.</td>
+ <td><code>VK_NEXT_DAY</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"GuidePreviousDay"</code></td>
+ <td>If the guide is currently displayed, this button tells the guide to display the previous day's content.</td>
+ <td><code>VK_PREV_DAY</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Info"</code></td>
+ <td>Toggles the display of information about the currently selected content, program, or media.</td>
+ <td><code>VK_INFO</code></td>
+ <td></td>
+ <td><code>Qt::Key_Info</code> (0x0100011B)</td>
+ <td><code>KEYCODE_INFO</code> (165)</td>
+ </tr>
+ <tr>
+ <td><code>"InstantReplay"</code></td>
+ <td>Tellls the device to perform an instant replay (typically some form of jumping back a short amount of time then playing it again, possibly but not usually in slow motion).</td>
+ <td><code>VK_INSTANT_REPLAY</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Link"</code></td>
+ <td>Opens content liniked to the current program, if available and possible.</td>
+ <td><code>VK_LINK</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"ListProgram"</code></td>
+ <td>Lists the current program.</td>
+ <td><code>VK_LIST</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LiveContent"</code></td>
+ <td>Toggles a display listing currently available live content or programs.</td>
+ <td><code>VK_LIVE</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Lock"</code></td>
+ <td>Locks or unlocks the currently selected content or pgoram.</td>
+ <td><code>VK_LOCK</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"MediaApps"</code></td>
+ <td>Presents a list of media applications, such as photo viewers, audio and video players, and games. [1]</td>
+ <td><code>VK_APPS</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"MediaAudioTrack"</code></td>
+ <td>The Audio Track key.</td>
+ <td></td>
+ <td></td>
+ <td>GDK_KEY_AudioCycleTrack (0x1008FF9B)<br>
+ <code>Qt::Key_AudioCycleTrack</code> (0x01000106)</td>
+ <td><code>KEYCODE_MEDIA_AUDIO_TRACK</code> (222)</td>
+ </tr>
+ <tr>
+ <td><code>"MediaLast"</code></td>
+ <td>Jumps back to the last-viewed content, program, or other media.</td>
+ <td><code>VK_LAST</code></td>
+ <td></td>
+ <td><code>Qt::Key_MediaLast</code> (0x0100FFFF)</td>
+ <td><code>KEYCODE_LAST_CHANNEL</code> (229)</td>
+ </tr>
+ <tr>
+ <td><code>"MediaSkipBackward"</code></td>
+ <td>Skips backward to the previous content or program.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_MEDIA_SKIP_BACKWARD</code></td>
+ </tr>
+ <tr>
+ <td><code>"MediaSkipForward"</code></td>
+ <td>Skips forward to the next content or program.</td>
+ <td><code>VK_SKIP</code></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_MEDIA_SKIP_FORWARD</code></td>
+ </tr>
+ <tr>
+ <td><code>"MediaStepBackward"</code></td>
+ <td>Steps backward to the previous content or program.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_MEDIA_STEP_BACKWARD</code></td>
+ </tr>
+ <tr>
+ <td><code>"MediaStepForward"</code></td>
+ <td>Steps forward to the next content or program.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_MEDIA_SKIP_FORWARD</code></td>
+ </tr>
+ <tr>
+ <td><code>"MediaTopMenu"</code></td>
+ <td>Top Menu button; opens the media's main menu, such as on a DVD or Blu-Ray disc.</td>
+ <td></td>
+ <td></td>
+ <td><code>Qt::Key_TopMenu</code> (0x0100010A)</td>
+ <td><code>KEYCODE_MEDIA_TOP_MENU</code></td>
+ </tr>
+ <tr>
+ <td><code>"NavigateIn"</code></td>
+ <td>Navigates into a submenu or option.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_NAVIGATE_IN</code></td>
+ </tr>
+ <tr>
+ <td><code>"NavigateNext"</code></td>
+ <td>Navigates to the next item.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_NAVIGATE_NEXT</code></td>
+ </tr>
+ <tr>
+ <td><code>"NavigateOut"</code></td>
+ <td>Navigates out of the current screen or menu.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_NAVIGATE_OUT</code></td>
+ </tr>
+ <tr>
+ <td><code>"NavigatePrevious"</code></td>
+ <td>Navigates to the previous item.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_NAVIGATE_PREVIOUS</code></td>
+ </tr>
+ <tr>
+ <td><code>"NextFavoriteChannel"</code></td>
+ <td>Cycles to the next channel in the favorites list.</td>
+ <td><code>VK_NEXT_FAVORITE_CHANNEL</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"NextUserProfile"</code></td>
+ <td>Cycles to the next saved user profile, if this feature is supported and multiple profiles exist.</td>
+ <td><code>VK_USER</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"OnDemand"</code></td>
+ <td>Opens the user interface for selecting on demand content or programs to watch.</td>
+ <td><code>VK_ON_DEMAND</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Pairing"</code></td>
+ <td>Starts the process of pairing the remote with a device to be controlled.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_PAIRING</code> (225)</td>
+ </tr>
+ <tr>
+ <td><code>"PinPDown"</code></td>
+ <td>A button to move the picture-in-picture view downward.</td>
+ <td><code>VK_PINP_DOWN</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"PinPMove"</code></td>
+ <td>A button to control moving the picture-in-picture view.</td>
+ <td><code>VK_PINP_MOVE</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"PinPToggle"</code></td>
+ <td>Toggles display of th epicture-in-picture view on and off.</td>
+ <td><code>VK_PINP_TOGGLE</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"PinPUp"</code></td>
+ <td>A button to move the picture-in-picture view upward.</td>
+ <td><code>VK_PINP_UP</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"PlaySpeedDown"</code></td>
+ <td>Decreases the media playback rate.</td>
+ <td><code>VK_PLAY_SPEED_DOWN</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"PlaySpeedReset"</code></td>
+ <td>Returns the media playback rate to normal.</td>
+ <td><code>VK_PLAY_SPEED_RESET</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"PlaySpeedUp"</code></td>
+ <td>Increases the media playback rate.</td>
+ <td><code>VK_PLAY_SPEED_UP</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"RandomToggle"</code></td>
+ <td>Toggles random media (also known as "shuffle mode") on and off.</td>
+ <td><code>VK_RANDOM_TOGGLE</code></td>
+ <td></td>
+ <td><code>GDK_KEY_AudioRandomPlay</code> (0x1008FF99)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"RcLowBattery"</code></td>
+ <td>A code sent when the remote control's battery is low. This doesn't actually correspond to a physical key at all.</td>
+ <td><code>VK_RC_LOW_BATTERY</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"RecordSpeedNext"</code></td>
+ <td>Cycles among the available media recording speeds.</td>
+ <td><code>VK_RECORD_SPEED_NEXT</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"RfBypass"</code></td>
+ <td>Toggles radio frequency (RF) input bypass mode on and off. RF bypass mode passes RF input directly to the RF output without any processing or filtering.</td>
+ <td><code>VK_RF_BYPASS</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"ScanChannelsToggle"</code></td>
+ <td>Toggles the channel scan mode on and off; this is a mode which flips through channels automatically until the user stops the scan.</td>
+ <td><code>VK_SCAN_CHANNELS_TOGGLE</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"ScreenModeNext"</code></td>
+ <td>Cycles through the available screen display modes.</td>
+ <td><code>VK_SCREEN_MODE_NEXT</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Settings"</code></td>
+ <td>Toggles display of the device's settings screen on and off.</td>
+ <td><code>VK_SETTINGS</code></td>
+ <td></td>
+ <td><code>Qt::Key_Settings</code> (0x0100011C)</td>
+ <td><code>KEYCODE_SETTINGS</code></td>
+ </tr>
+ <tr>
+ <td><code>"SplitScreenToggle"</code></td>
+ <td>Toggles split screen display mode on and off.</td>
+ <td><code>VK_SPLIT_SCREEN_TOGGLE</code></td>
+ <td></td>
+ <td><code>GDK_KEY_SplitScreen (</code>0x1008FF7D)<br>
+ <code>Qt::Key_SplitScreen</code> (0x010000ED)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"STBInput"</code> [3]</td>
+ <td>Cycles among input modes on an external set-top box (STB).</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_STB_INPUT</code> (180)</td>
+ </tr>
+ <tr>
+ <td><code>"STBPower"</code> [3]</td>
+ <td>Toggles on and off an external STB.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_STB_POWER</code> (179)</td>
+ </tr>
+ <tr>
+ <td><code>"Subtitle"</code></td>
+ <td>Toggles the display of subtitles on and off if they're available.</td>
+ <td><code>VK_SUBTITLE</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Subtitle</code> (0x1008FF9A)</td>
+ <td><code>KEYCODE_CAPTIONS</code> (175)</td>
+ </tr>
+ <tr>
+ <td><code>"Teletext"</code></td>
+ <td>Toggles display of {{interwiki("wikipedia", "teletext")}}, if available.</td>
+ <td><code>VK_TELETEXT</code></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_TV_TELETEXT</code> (233)</td>
+ </tr>
+ <tr>
+ <td><code>"VideoModeNext"</code> [3]</td>
+ <td>Cycles through the available video modes.</td>
+ <td><code>VK_VIDEO_MODE_NEXT</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Next_VMode</code> (0x1008FE22)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Wink"</code></td>
+ <td>Causes the device to identify itself in some fashion, such as by flashing a light, briefly changing the brightness of indicator lights, or emitting a tone.</td>
+ <td><code>VK_WINK</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"ZoomToggle"</code> [2]</td>
+ <td>Toggles between full-screen and scaled content display, or otherwise change the magnification level.</td>
+ <td><code>VK_ZOOM</code> (0xFB)</td>
+ <td></td>
+ <td><code>Qt::Key_Zoom</code> (0x01020006)</td>
+ <td><code>KEYCODE_TV_ZOOM_MODE</code> (255)</td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] Don't confuse the media controller <code>VK_APPS</code> key with the Windows <code>VK_APPS</code> key, which is also known as <code>VK_CONTEXT_MENU</code>. That key is encoded as <code>"ContextMenu"</code>.</p>
+
+<p>[2] Internet Explorer 9 and Firefox 36 and earlier identify the zoom toggle button as <code>"Zoom"</code>. Firefox 37 corrects this to <code>"ZoomToggle"</code>.</p>
+
+<p>[3] These keys were <code>"Unidentified"</code> until Firefox 37.</p>
+
+<h2 id="Speech_recognition_keys">Speech recognition keys</h2>
+
+<p>These special multimedia keys are used to control speech recognition features.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"SpeechCorrectionList"</code> [1]</td>
+ <td>Presents a list of possible corrections for a word which was incorrectly identified.</td>
+ <td><code>APPCOMMAND_CORRECTION_LIST</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"SpeechInputToggle"</code> [2]</td>
+ <td>Toggles between dictation mode and command/control mode. This lets the speech engine know whether to interpret spoken words as input text or as commands.</td>
+ <td><code>APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] The <code>APPCOMMAND_CORRECTION_LIST</code> command on Windows generates <code>"Unidentified"</code> on Firefox.</p>
+
+<p>[2] The <code>APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE</code> command on Windows generates <code>"Unidentified"</code> on Firefox.</p>
+
+<h2 id="Document_keys">Document keys</h2>
+
+<p>These keys control documents. In the specification, they're included in other sets of keys, such as the media keys, but they make more sense when considered to be their own category.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"Close"</code> [1]</td>
+ <td>Closes the current document or message. Must not exit the application.</td>
+ <td><code>APPCOMMAND_CLOSE</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Close</code> (0x1008FF56)<br>
+ <code>Qt::Key_Close</code> (0x010000CE)</td>
+ <td><code>KEYCODE_MEDIA_CLOSE</code> (128)</td>
+ </tr>
+ <tr>
+ <td><code>"New"</code> [1]</td>
+ <td>Creates a new document or message.</td>
+ <td><code>APPCOMMAND_NEW</code></td>
+ <td></td>
+ <td><code>GDK_KEY_New</code> (0x1008FF68)<br>
+ <code>Qt::Key_New</code> (0x01000120)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Open"</code> [1]</td>
+ <td>Opens an existing document or message.</td>
+ <td><code>APPCOMMAND_OPEN</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Open</code> (0x1008FF6B)<br>
+ <code>Qt::Key_Open</code> (0x01000121)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Print"</code></td>
+ <td>Prints the current document or message.</td>
+ <td><code>APPCOMMAND_PRINT</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Print</code> (0xFF61)<br>
+ <code>Qt::Print</code> (0x01000009)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Save"</code> [1]</td>
+ <td>Saves the current document or message.</td>
+ <td><code>APPCOMMAND_SAVE</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Save</code> (0x1008FF77)<br>
+ <code>Qt::Key_Save</code> (0x010000EA)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"SpellCheck"</code> [1]</td>
+ <td>Starts spell checking the current document.</td>
+ <td><code>APPCOMMAND_SPELL_CHECK</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Spell</code> (0x1008FF7C)<br>
+ <code>Qt::Key_Spell</code> (0x010000EC)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"MailForward"</code> [1]</td>
+ <td>Opens the user interface to forward a message.</td>
+ <td><code>APPCOMMAND_FORWARD_MAIL</code></td>
+ <td></td>
+ <td><code>GDK_KEY_MailForward</code> (0x1008FF90)<br>
+ <code>Qt::Key_MailForward</code> (0x010000FB)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"MailReply"</code> [1]</td>
+ <td>Opens the user interface to reply to a message.</td>
+ <td><code>APPCOMMAND_REPLY_TO_MAIL</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Reply</code> (0x1008FF72)<br>
+ <code>Qt::Key_Reply</code> (0x010000E5)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"MailSend"</code> [1]</td>
+ <td>Sends the current message.</td>
+ <td><code>APPCOMMAND_SEND_MAIL</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Send</code> (0x1008FF7B)<br>
+ <code>Qt::Key_Send</code> (0x010000EB)</td>
+ <td></td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] Prior to Firefox 37, this key generated the key value <code>"Unidentified"</code>.</p>
+
+<h2 id="Application_selector_keys">Application selector keys</h2>
+
+<p>Some keyboards offer special keys for launching or switching to certain common applications. Key values for those are listed here.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"LaunchCalculator"</code> [5]</td>
+ <td>The <kbd>Calculator</kbd> key, often labeled with an icon such as <kbd>{{FontAwesomeIcon("icon-calculator")}}</kbd>. This is often used as a generic application launcher key (<code>APPCOMMAND_LAUNCH_APP2</code>).</td>
+ <td><code>APPCOMMAND_LAUNCH_APP2</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Calculator</code> (0x1008FF1D)<br>
+ <code>Qt::Key_Calculator</code> (0x010000CB)</td>
+ <td><code>KEYCODE_CALCULATOR</code> (210)</td>
+ </tr>
+ <tr>
+ <td><code>"LaunchCalendar"</code> [5]</td>
+ <td>The <kbd>Calendar</kbd> key, often labeled with an icon like <kbd>{{FontAwesomeIcon("icon-calendar")}}</kbd>.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Calendar</code> (0x1008FF20)<br>
+ <code>Qt::Key_Calendar</code> (0x010000E4)</td>
+ <td><code>KEYCODE_CALENDAR</code> (208)</td>
+ </tr>
+ <tr>
+ <td><code>"LaunchContacts"</code></td>
+ <td>The <kbd>Contacts</kbd> key.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td><code>KEYCODE_CONTACTS</code> (207)</td>
+ </tr>
+ <tr>
+ <td><code>"LaunchMail"</code></td>
+ <td>The <kbd>Mail</kbd> key. This is often displayed as <kbd>{{FontAwesomeIcon("icon-envelope-o")}}</kbd>.</td>
+ <td><code>VK_LAUNCH_MAIL</code> (0xB4)<br>
+ <code>APPCOMMAND_LAUNCH_MAIL</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Mail</code> (0x1008FF19)<br>
+ <code>Qt::Key_LaunchMail</code> (0x010000A0)</td>
+ <td><code>KEYCODE_ENVELOPE</code> (65)</td>
+ </tr>
+ <tr>
+ <td><code>"LaunchMediaPlayer"</code> [1]</td>
+ <td>The <kbd>Media Player</kbd> key.</td>
+ <td><code>VK_LAUNCH_MEDIA_SELECT</code> (0xB5)<br>
+ <code>APPCOMMAND_LAUNCH_MEDIA_SELECT</code></td>
+ <td></td>
+ <td><code>GDK_KEY_CD</code> (0x1008FF53)<br>
+ <code>GDK_KEY_Video</code> (0x1008FF87)<br>
+ <code>GDK_KEY_AudioMedia</code> (0x1008FF32)<br>
+ <code>Qt::Key_LaunchMedia</code> (0x010000A1)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchMusicPlayer"</code> [5]</td>
+ <td>The <kbd>Music Player</kbd> key, often labeled with an icon such as <kbd>{{FontAwesomeIcon("icon-music")}}</kbd>.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Music</code> (0x1008FF92)<br>
+ <code>Qt::Key_Music</code> (0x010000FD)</td>
+ <td><code>KEYCODE_MUSIC</code> (209)</td>
+ </tr>
+ <tr>
+ <td><code>"LaunchMyComputer"</code> [5]</td>
+ <td>The <kbd>My Computer</kbd> key on Windows keyboards. This is often used as a generic application launcher key (<code>APPCOMMAND_LAUNCH_APP1</code>).</td>
+ <td><code>APPCOMMAND_LAUNCH_APP1</code></td>
+ <td></td>
+ <td><code>GDK_KEY_MyComputer</code> (0x1008FF33)<br>
+ <code>GDK_KEY_Explorer</code> (0x1008FF5D)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchPhone"</code></td>
+ <td>The <kbd>Phone</kbd> key, to open the phone dialer application if one is present.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Phone</code> (0x1008FF6E)<br>
+ <code>Qt::Key_Phone</code> (0x010000E3)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchScreenSaver"</code> [5]</td>
+ <td>The <kbd>Screen Saver</kbd> key.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_ScreenSaver</code> (0x1008FF2D)<br>
+ <code>Qt::Key_ScreenSaver</code> (0x010000BA)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchSpreadsheet"</code> [4]</td>
+ <td>The <kbd>Spreadsheet</kbd> key. This key may be labeled with an icon such as <kbd>{{FontAwesomeIcon("icon-table")}}</kbd> or that of a specific spreadsheet application.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Excel</code> (0x1008FF5C)<br>
+ <code>Qt::Key_Excel</code> (0x010000D4)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchWebBrowser"</code> [4]</td>
+ <td>The <kbd>Web Browser</kbd> key. This key is frequently labeled with an icon such as <kbd>{{FontAwesomeIcon("icon-globe")}}</kbd> or the icon of a specific browser, depending on the device manufacturer.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_WWW</code> (0x1008FF2E)<br>
+ <code>Qt::Key_WWW</code> (0x010000BB)</td>
+ <td><code>KEYCODE_EXPLORER</code> (64)</td>
+ </tr>
+ <tr>
+ <td><code>"LaunchWebCam"</code> [5]</td>
+ <td>The <kbd>WebCam</kbd> key. Opens the webcam application.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_WebCam</code> (0x1008FF8F)<br>
+ <code>Qt::Key_WebCam</code> (0x010000FA)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchWordProcessor"</code> [5]</td>
+ <td>The <kbd>Word Processor</kbd> key. This may be an icon of a specific word processor application, or a generic document icon.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Word</code> (0x1008FF89)<br>
+ <code>Qt::Key_Word</code> (0x010000F4)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication1"</code> [2]</td>
+ <td>The first generic application launcher button.</td>
+ <td><code>VK_LAUNCH_APP1</code> (0xB6)<br>
+ <code>APPCOMMAND_LAUNCH_APP1</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Launch0</code> (0x1008FF40)<br>
+ <code>Qt::Key_Launch0</code> (0x010000A2)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication2"</code> [3]</td>
+ <td>The second generic application launcher button.</td>
+ <td><code>VK_LAUNCH_APP2</code> (0xB7)<br>
+ <code>APPCOMMAND_LAUNCH_APP2</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Launch1</code> (0x1008FF41)<br>
+ <code>Qt::Key_Launch1</code> (0x010000A3)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication3"</code></td>
+ <td>The third generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Launch2</code> (0x1008FF42)<br>
+ <code>Qt::Key_Launch2</code> (0x010000A4)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication4"</code></td>
+ <td>The fourth generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Launch3</code> (0x1008FF43)<br>
+ <code>Qt::Key_Launch3</code> (0x010000A5)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication5"</code></td>
+ <td>The fifth generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Launch4</code> (0x1008FF44)<br>
+ <code>Qt::Key_Launch4</code> (0x010000A6)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication6"</code></td>
+ <td>The sixth generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Launch5</code> (0x1008FF45)<br>
+ <code>Qt::Key_Launch5</code> (0x010000A7)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication7"</code></td>
+ <td>The seventh generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Launch6</code> (0x1008FF46)<br>
+ <code>Qt::Key_Launch6</code> (0x010000A8)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication8"</code></td>
+ <td>The eighth generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Launch7</code> (0x1008FF47)<br>
+ <code>Qt::Key_Launch7</code> (0x010000A9)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication9"</code></td>
+ <td>The ninth generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Launch8</code> (0x1008FF48)<br>
+ <code>Qt::Key_Launch8</code> (0x010000AA)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication10"</code></td>
+ <td>The 10th generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_Launch9</code> (0x1008FF49)<br>
+ <code>Qt::Key_Launch9</code> (0x010000AB)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication11"</code></td>
+ <td>The 11th generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_LaunchA</code> (0x1008FF4A)<br>
+ <code>Qt::Key_LaunchA</code> (0x010000AC)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication12"</code></td>
+ <td>The 12th generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_LaunchB</code> (0x1008FF4B)<br>
+ <code>Qt::Key_LaunchB</code> (0x010000AD)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication13"</code></td>
+ <td>The 13th generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_LaunchC</code> (0x1008FF4C)<br>
+ <code>Qt::Key_LaunchC</code> (0x010000AE)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication14"</code></td>
+ <td>The 14th generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_LaunchD</code> (0x1008FF4D)<br>
+ <code>Qt::Key_LaunchD</code> (0x010000AF)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication15"</code></td>
+ <td>The 15th generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_LaunchE</code> (0x1008FF4E)<br>
+ <code>Qt::Key_LaunchE</code> (0x010000B0)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"LaunchApplication16"</code></td>
+ <td>The 16th generic application launcher button.</td>
+ <td></td>
+ <td></td>
+ <td><code>GDK_KEY_LaunchF</code> (0x1008FF4F)<br>
+ <code>Qt::Key_LaunchF</code> (0x010000B1)</td>
+ <td></td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] Internet Explorer, Edge, and Firefox (36 and earlier) use <code>"SelectMedia"</code> instead of <code>"LaunchMediaPlayer"</code>. Firefox 37 through Firefox 48 use <code>"MediaSelect"</code>. Firefox 49 has been updated to match the latest specification, and to return <code>"LaunchMediaPlayer"</code>.</p>
+
+<p>[2] Google Chrome 57 and earlier returned <code>"LaunchMyComputer"</code> instead of <code>"LaunchApplication1"</code>. See <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=612743">Chrome Bug 612743</a> for more information.</p>
+
+<p>[3] Google Chrome 57 and earlier returned <code>"LaunchCalculator"</code> instead of <code>"LaunchApplication2"</code>. See <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=612743">Chrome Bug 612743</a> for more information.</p>
+
+<p>[4] Prior to Firefox 37, Firefox returned the key code <code>"LaunchApplication1"</code> instead of "<code>LaunchWebBrowser"</code> for the Web browser key.</p>
+
+<p>[5] Firefox introduced support for this key in Firefox 37; prior to that, this key was reported as <code>"Unidentified"</code>.</p>
+
+<h2 id="Browser_control_keys">Browser control keys</h2>
+
+<p>Some keyboards include special keys for controlling Web browsers. Those keys follow.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"BrowserBack"</code></td>
+ <td>Navigates to the previous content or page in the current Web view's history.</td>
+ <td><code>VK_BROWSER_BACK</code> (0xA6)<br>
+ <code>APPCOMMAND_BROWSER_BACKWARD</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Back</code> (0x1008FF26)<br>
+ <code>Qt::Key_Back</code> (0x01000061)</td>
+ <td><code>KEYCODE_BACK</code> (4)</td>
+ </tr>
+ <tr>
+ <td><code>"BrowserFavorites"</code> [1]</td>
+ <td>Opens the user's list of bookmarks/favorites.</td>
+ <td><code>VK_BROWSER_FAVORITES</code> (0xAB)<br>
+ <code>APPCOMMAND_BROWSER_FAVORITES</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Favorites</code> (0x1008FF30)<br>
+ <code>GDK_KEY_MySites</code> (0x1008FF67)<br>
+ <code>Qt::Favorites</code> (0x01000091)</td>
+ <td><code>KEYCODE_BOOKMARK</code> (174)</td>
+ </tr>
+ <tr>
+ <td><code>"BrowserForward"</code></td>
+ <td>Navigates to the next content or page in the current Web view's history.</td>
+ <td><code>VK_BROWSER_FORWARD</code> (0xA7)<br>
+ <code>APPCOMMAND_BROWSER_FORWARD</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Forward</code> (0x1008FF27)<br>
+ <code>Qt::Key_Forward</code> (0x01000062)</td>
+ <td><code>KEYCODE_FORWARD</code> (125)</td>
+ </tr>
+ <tr>
+ <td><code>"BrowserHome"</code></td>
+ <td>Navigates to the user's preferred home page.</td>
+ <td><code>VK_BROWSER_HOME</code> (0xAC)<br>
+ <code>APPCOMMAND_BROWSER_HOME</code></td>
+ <td></td>
+ <td><code>GDK_KEY_HomePage</code> (0x1008FF18)<br>
+ <code>Qt::Key_HomePage</code> (0x01000090)</td>
+ <td><code>KEYCODE_HOME</code> (3)</td>
+ </tr>
+ <tr>
+ <td><code>"BrowserRefresh"</code></td>
+ <td>Refreshes the current page or contentl.</td>
+ <td><code>VK_BROWSER_REFRESH</code> (0xA8)<br>
+ <code>APPCOMMAND_BROWSER_REFRESH</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Refresh</code> (0x1008FF29)<br>
+ <code>GDK_KEY_Reload</code> (0x1008FF73)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"BrowserSearch"</code></td>
+ <td>Activates the user's preferred search engine or the search interface within their browser.</td>
+ <td><code>VK_BROWSER_SEARCH</code> (0xAA)<br>
+ <code>APPCOMMAND_BROWSER_SEARCH</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Search</code> (0x1008FF1B)<br>
+ <code>Qt::Key_Search</code> (0x01000092)</td>
+ <td><code>KEYCODE_SEARCH</code> (84)</td>
+ </tr>
+ <tr>
+ <td><code>"BrowserStop"</code></td>
+ <td>Stops loading the currently displayed Web view or content.</td>
+ <td><code>VK_BROWSER_STOP</code> (0xA9)<br>
+ <code>APPCOMMAND_BROWSER_STOP</code></td>
+ <td></td>
+ <td><code>GDK_KEY_Stop</code> (0x1008FF28)<br>
+ <code>Qt::Key_Search</code> (0x01000063)</td>
+ <td></td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] Prior to Firefox 37, this key's value was reported as <code>"Unidentified"</code>.</p>
+
+<h2 id="Numeric_keypad_keys">Numeric keypad keys</h2>
+
+<p>These keys are found on the keyboard's numeric keypad. However, not all are present on every keyboard. Although typical numeric keypads have numeric keys from <kbd>0</kbd> to <kbd>9</kbd> (encoded as <code>"0"</code> through <code>"9"</code>), some multimedia keyboards include additional number keys for higher numbers.</p>
+
+<div class="note">
+<p>The <kbd>10</kbd> key, if present, generates events with the <code>key</code> value of <code>"0"</code>.</p>
+</div>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th rowspan="2" scope="col" style="text-align: left;"><code>KeyboardEvent.key</code> Value</th>
+ <th rowspan="2" scope="col" style="text-align: left;">Description</th>
+ <th colspan="4" scope="col" style="text-align: center;">Virtual Keycode</th>
+ </tr>
+ <tr>
+ <th scope="col" style="text-align: left;">Windows</th>
+ <th scope="col" style="text-align: left;">Mac</th>
+ <th scope="col" style="text-align: left;">Linux</th>
+ <th scope="col" style="text-align: left;">Android</th>
+ </tr>
+ <tr>
+ <td><code>"Decimal"</code> [1] {{obsolete_inline}}</td>
+ <td>The decimal point key (typically <kbd>.</kbd> or <kbd>,</kbd> depending on the region. In newer browsers, this value to simply be the character generated by the decimal key (one of those two characters). [1]</td>
+ <td><code>VK_DECIMAL</code> (0x6E)</td>
+ <td><code>kVK_ANSI_KeypadDecimal</code> (0x41)</td>
+ <td><code>GDK_KEY_KP_Decimal</code> (0xFFAE)</td>
+ <td><code>KEYCODE_NUMPAD_DOT</code> (158)</td>
+ </tr>
+ <tr>
+ <td><code>"Key11"</code></td>
+ <td>The <kbd>11</kbd> key found on certain media numeric keypads.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Key12"</code></td>
+ <td>The <kbd>12</kbd> key found on certain media numeric keypads.</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>"Multiply"</code> [1] {{obsolete_inline}}</td>
+ <td>The numeric keypad's multiplication key, <kbd>*</kbd>.</td>
+ <td><code>VK_MULTIPLY</code> (0x6A)</td>
+ <td><code>kVK_ANSI_KeypadMultiply</code> (0x43)</td>
+ <td><code>GDK_KEY_KP_Multiply</code> (0xFFAA)<br>
+ <code>Qt::Key_Multiply</code> (0x0D7)</td>
+ <td><code>KEYCODE_NUMPAD_MULTIPLY</code> (155)</td>
+ </tr>
+ <tr>
+ <td><code>"Add"</code> [1] {{obsolete_inline}}</td>
+ <td>The numeric keypad's addition key, <kbd>+</kbd>.</td>
+ <td><code>VK_ADD</code> (0x6B)</td>
+ <td><code>kVK_ANSI_KeypadPlus</code> (0x45)</td>
+ <td><code>GDK_KEY_KP_Add</code> (0xFFAB)</td>
+ <td><code>KEYCODE_NUMPAD_ADD</code> (157)</td>
+ </tr>
+ <tr>
+ <td><code>"Clear"</code></td>
+ <td>The numeric keypad's <kbd>Clear</kbd> key.</td>
+ <td></td>
+ <td><code>kVK_ANSI_KeypadClear</code> (0x47)</td>
+ <td><code>GDK_KEY_Clear</code> (0xFF0B)<br>
+ <code>Qt::Key_Clear</code> (0x0100000B)</td>
+ <td><code>KEYCODE_CLEAR</code> (28)</td>
+ </tr>
+ <tr>
+ <td><code>"Divide"</code> [1] {{obsolete_inline}}</td>
+ <td>The numeric keypad's division key, /.</td>
+ <td><code>VK_DIVIDE</code> (0x6F)</td>
+ <td><code>kVK_ANSI_KeypadDivide</code> (0x4B)</td>
+ <td><code>GDK_KEY_KP_Divide</code> (0xFFAF)<br>
+ <code>Qt::Key_Slash</code> (0x2F)</td>
+ <td><code>KEYCODE_NUMPAD_DIVIDE</code> (154)</td>
+ </tr>
+ <tr>
+ <td><code>"Subtract"</code> [1] {{obsolete_inline}}</td>
+ <td>The numeric keypad's subtraction key, -.</td>
+ <td><code>VK_SUBTRACT</code> (0x6D)</td>
+ <td><code>kVK_ANSI_KeypadMinus</code> (0x4E)</td>
+ <td><code>GDK_KEY_KP_Subtract</code> (0xFFAD)</td>
+ <td><code>KEYCODE_NUMPAD_SUBTRACT</code> (156)</td>
+ </tr>
+ <tr>
+ <td><code>"Separator"</code> [1]</td>
+ <td>The numeric keypad's places separator character (in the United States, this is a comma, but elsewhere it is frequently a period).</td>
+ <td><code>VK_SEPARATOR</code> (0x6C)</td>
+ <td><code>kVK_JIS_KeypadComma</code> (0x5F)</td>
+ <td><code>GDK_KEY_KP_Separator</code> (0xFFAC)</td>
+ <td><code>KEYCODE_NUMPAD_COMMA</code> (159)</td>
+ </tr>
+ <tr>
+ <td>"0" through "9"</td>
+ <td>The actual digit keys on the numeric keypad.</td>
+ <td><code>VK_NUMPAD0</code> (0x60) - <code>VK_NUMPAD9</code> (0x69)</td>
+ <td><code>kVK_Keypad0</code> (0x52) - <code>kVK_Keypad9</code> (0x5C)</td>
+ <td><code>GDK_KEY_KP_0</code> (0xFFB0) - <code>GDK_KEY_KP_9</code> (0xFFB9)</td>
+ <td><code>KEYCODE_NUMPAD_0</code> (144) - <code>KEYCODE_NUMPAD_9</code> (153)</td>
+ </tr>
+ </thead>
+</table>
+
+<p>[1] While older browsers used words like <code>"Add"</code>, <code>"Decimal"</code>, <code>"Multiply"</code>, and so forth modern browsers identify these using the actual character (<code>"+"</code>, <code>"."</code>, <code>"*"</code>, and so forth).</p>
diff --git a/files/zh-cn/web/api/keyboardevent/keyboardevent/index.html b/files/zh-cn/web/api/keyboardevent/keyboardevent/index.html
new file mode 100644
index 0000000000..86c792ce4a
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/keyboardevent/index.html
@@ -0,0 +1,151 @@
+---
+title: 键盘事件 KeyboardEvent()
+slug: Web/API/KeyboardEvent/KeyboardEvent
+tags:
+ - API
+ - DOM
+ - KeyboardEvent
+ - events
+translation_of: Web/API/KeyboardEvent/KeyboardEvent
+---
+<p>{{APIRef("DOM Events")}}</p>
+
+<p><strong><code>KeyboardEvent()</code></strong> 构造函数新建一个 {{domxref("KeyboardEvent")}} 实例。</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox"> <em>event</em> = new KeyboardEvent(<em>typeArg</em>, <em>KeyboardEventInit</em>);</pre>
+
+<h3 id="值">值</h3>
+
+<dl>
+ <dt><em>typeArg</em></dt>
+ <dd>{{domxref("DOMString")}} 类型,表示事件名称。</dd>
+ <dt><em>KeyboardEventInit</em>{{optional_inline}}</dt>
+</dl>
+
+<dl>
+ <dd><code>KeyboardEventInit</code> 字典,有以下几种值:
+
+ <ul>
+ <li><code>"key"</code>, 可选,默认为 <code>""</code>,  {{domxref("DOMString")}} 类型, 设置 {{domxref("KeyboardEvent.key")}} 的值。</li>
+ <li><code>"code"</code>, 可选,默认为 <code>""</code>, {{domxref("DOMString")}} 类型, 设置{{domxref("KeyboardEvent.code")}} 的值。</li>
+ <li><code>"location"</code>, 可选,默认为 <code>0</code>,  <code>unsigned long</code>类型, 设置 {{domxref("KeyboardEvent.location")}} 的值。</li>
+ <li><code>"ctrlKey"</code>, 可选,默认为 <code>false</code>, {{jsxref("Boolean")}} 类型, 设置 {{domxref("KeyboardEvent.ctrlKey")}} 的值。</li>
+ <li><code>"shiftKey"</code>, 可选,默认为 <code>false</code>, {{jsxref("Boolean")}} 类型, 设置{{domxref("KeyboardEvent.shiftKey")}} 的值。</li>
+ <li><code>"altKey"</code>, 可选,默认为 <code>false</code>, {{jsxref("Boolean")}} 类型, 设置 {{domxref("KeyboardEvent.altKey")}} 的值。</li>
+ <li><code>"metaKey"</code>, 可选,默认为 <code>false</code>, {{jsxref("Boolean")}} 类型, 设置 {{domxref("KeyboardEvent.metaKey")}} 的值。</li>
+ <li><code>"repeat"</code>, 可选,默认为 <code>false</code>, {{jsxref("Boolean")}} 类型, 设置 {{domxref("KeyboardEvent.repeat")}} 的值。</li>
+ <li><code>"isComposing"</code>, 可选,默认为 <code>false</code>, {{jsxref("Boolean")}} 类型, 设置 {{domxref("KeyboardEvent.isComposing")}} 的值。</li>
+ <li><code>"charCode"</code>, 可选,默认为 <code>0</code>, <code>unsigned long</code> 类型, 设置 {{domxref("KeyboardEvent.charCode")}} (已废弃) 的值。</li>
+ <li><code>"keyCode"</code>, 可选,默认为 <code>0</code>, <code>unsigned long</code> 类型, 设置{{domxref("KeyboardEvent.keyCode")}} (已废弃) 的值。</li>
+ <li><code>"which"</code>, 可选,默认为 <code>0</code>, <code>unsigned long</code> 类型, 设置{{domxref("KeyboardEvent.which")}} (已废弃) 的值。</li>
+ </ul>
+
+ <div class="note">
+ <p><em><code>KeyboardEventInit</code></em><em> 字典也可以接受来自 {{domxref("UIEvent.UIEvent", "UIEventInit")}} 和 {{domxref("Event.Event", "EventInit")}} 的字典字段值。</em></p>
+ </div>
+ </dd>
+</dl>
+
+<h2 id="Specifications" name="Specifications">标准</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('UI Events','#interface-keyboardevent','KeyboardEvent()')}}</td>
+ <td>{{Spec2('UI Events')}}</td>
+ <td>Current definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('DOM3 Events','#interface-KeyboardEvent','KeyboardEvent()')}}</td>
+ <td>{{Spec2('DOM3 Events')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>特性</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>基本支持</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatGeckoDesktop(31) }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ </tr>
+ <tr>
+ <td>初始化 <code>code</code> 和 <code>key</code></td>
+ <td>{{CompatChrome(49.0)}}</td>
+ <td> </td>
+ <td> </td>
+ <td> </td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>特性</th>
+ <th>Android</th>
+ <th>Android Webview</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>基本支持</td>
+ <td>{{ CompatUnknown }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatGeckoMobile(31) }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>初始化 <code>code</code> 和 <code>key</code></td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome(49.0)}}</td>
+ <td> </td>
+ <td> </td>
+ <td> </td>
+ <td> </td>
+ <td>{{CompatChrome(49.0)}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="参考">参考</h2>
+
+<ul>
+ <li>{{domxref("KeyboardEvent")}} 构造的相关对象的接口</li>
+</ul>
diff --git a/files/zh-cn/web/api/keyboardevent/keycode/index.html b/files/zh-cn/web/api/keyboardevent/keycode/index.html
new file mode 100644
index 0000000000..c41e21285f
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/keycode/index.html
@@ -0,0 +1,3220 @@
+---
+title: KeyboardEvent.keyCode
+slug: Web/API/KeyboardEvent/keyCode
+translation_of: Web/API/KeyboardEvent/keyCode
+---
+<p>{{APIRef("DOM Events")}}{{deprecated_header()}}</p>
+
+<p>这个只读的属性 <strong><code>KeyboardEvent.keyCode</code></strong> 代表着一个唯一标识的所按下的键的未修改值,它依据于一个系统和实现相关的数字代码。这通常是与密钥对应的二进制的ASCII ({{RFC(20)}})或Windows 1252 码。如果这个键不能被标志,这个值为0。</p>
+
+<p>你应该尽量避免使用它;它已经被弃用了一段时间。相反的,如果它在你的浏览器中被实现了的话,你应该使用{{domxref("KeyboardEvent.code")}}。 不幸的是,有一些浏览器还是没有实现它,所以你在使用之前必须要小心,确认你所使用的那个被所有目标浏览器所支持。</p>
+
+<div class="note">
+<p>在处理keydown和keyup事件时,Web开发人员不应使用可打印字符的keycode属性。如上所述,keycode属性对可打印字符不有用,尤其是那些按下shift或alt键的输入。在实现快捷键处理程序时,事件(“keypress”)事件通常更好(至少当gecko是正在使用的运行时)。详情请参见Gecko按键事件.</p>
+</div>
+
+<h2 id="Example">Example</h2>
+
+<pre class="brush: js">window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return; // 如果已取消默认操作,则不应执行任何操作
+ }
+
+ var handled = false;
+ if (event.key !== undefined) {
+ // 使用KeyboardEvent.key处理事件,并将handled设置为true。
+ } else if (event.keyCode !== undefined) {
+ //使用KeyboardEvent.keyCode处理事件并将handled设置为true。
+ }
+
+ if (handled) {
+ // 如果事件已处理,则禁止“双重操作”
+ event.preventDefault();
+ }
+}, true);
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">规范</th>
+ <th scope="col">状态</th>
+ <th scope="col">Comment评论</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('DOM3 Events','#widl-KeyboardEvent-keyCode','KeyboardEvent.keyCode')}}</td>
+ <td>{{Spec2('DOM3 Events')}}</td>
+ <td>初始定义;指定为已弃用</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>特征</th>
+ <th>谷歌</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>基础支持</td>
+ <td>26 (probably earlier)</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>3.0 (possibly earlier)</td>
+ <td>6</td>
+ <td>11.6 (probably earlier)</td>
+ <td>5 (probably earlier)</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>特征</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>基础支持</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>
+ <p>5.1</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>{{Compat("api.KeyboardEvent.keyCode")}}</p>
+
+<h2 id="键码值">键码值</h2>
+
+<h3 id="标准位置的可打印键">标准位置的可打印键</h3>
+
+<p>在标准位置按下或释放可打印键导致的按键事件值在浏览器之间不兼容。<br>
+ IE只将本机虚拟密钥代码值公开为keyboardvent.keycode。<br>
+ Google Chrome、Chromium和Safari必须根据输入字符确定值。如果输入字符可以用US键盘布局输入,则使用US键盘布局上的keycode值。<br>
+ 从gecko 15 geckore lease(“15.0”)开始,gecko从一个可由键输入的ASCII字符(即使具有移位修饰符或支持ASCII的键盘布局)决定键码值。有关详细信息,请参见以下规则:</p>
+
+<ol>
+ <li>如果系统是Windows,并且按下键的本机键代码指示键是A-Z或0-9,请使用keycode。</li>
+ <li>如果系统是Mac,并且按下键的本机键码指示键为0-9,则使用keycode。</li>
+ <li>如果按下键输入一个ASCII字母或数字,没有修改键,请使用keycode。</li>
+ <li>如果按下键输入带SHIFT键的ASCII字母或数字,请使用keycode。</li>
+ <li>如果按下键输入另一个没有修改键的ASCII字符,请使用keycode。</li>
+ <li>如果按下键输入另一个带SHIFT键的ASCII字符,请使用keycode。</li>
+ <li>否则,即按下键输入一个Unicode字符:</li>
+</ol>
+
+<ul>
+ <li>如果键盘布局是支持ASCII的键盘布局(即,可以输入ASCII字母),则使用0或者根据下面的附加规则计算。</li>
+ <li>否则,即键盘布局不支持ASCII,使用环境中安装的具有最高优先级的支持ASCII的键盘布局:
+ <ul>
+ <li>如果按备用键盘布局上的键输入一个ASCII字母或数字,请使用keycode。</li>
+ <li>否则,使用0或者根据下面的附加规则计算。</li>
+ </ul>
+ </li>
+</ul>
+
+<p>从 Firefox 60 {{geckoRelease("60.0")}}开始, Gecko 会尽可能的根据以下规则额设置标点符号的 <code>keyCode</code> 值(当满足上述7.1或者7.2的时候):</p>
+
+<div class="warning">
+<p>这些附加规则的目的是为了使键盘布局映射unicode字符映射到美国键盘标点符号的用户可以使用只支持ASCII的键盘或者美国键盘布局的Firefox的web应用。否则,新映射的 <code>keyCode</code> 值可能会和其他按键冲突。例如,如果当前键盘布局是俄语,<code>"Period"</code> 键 和 <code>"Slash"</code> 键的 <code>keyCode</code> 都会是 <code>190</code> (<code>KeyEvent.DOM_VK_PERIOD</code>)。如果你需要区分这些按键但是你自己又不想支持时间上所有的键盘布局,你可能应该使用 {{domxref("KeyboardEvent.code")}}。</p>
+</div>
+
+<ol>
+ <li>如果运行macOS或者Linux:
+ <ol>
+ <li>如果你当前的键盘布局不支持ASCII并且候选支持ASCII键盘布局可用。
+ <ol>
+ <li>如果候选支持ASCII的键盘布局仅通过未修改的键产生ASCII字符,请对该字符使用<code>keyCode。</code></li>
+ <li>如果候选支持ASCII的键盘布局产生带有Shift键修饰符的ASCII字符,请对该字符使用<code>keyCode</code>。</li>
+ <li>否则,在美国键盘布局激活时,使用使用<code>keyCode</code>表示由按键产生的ASCII字符。</li>
+ </ol>
+ </li>
+ <li>否则,在美国键盘布局激活时,使用使用<code>keyCode</code>表示由按键产生的ASCII字符。</li>
+ </ol>
+ </li>
+ <li>如果运行Windows:
+ <ol>
+ <li>当美国键盘布局激活时,使用映射到Windows的相同虚拟键代码的按键产生的ASCII字符的<code>keyCode</code>值。</li>
+ </ol>
+ </li>
+</ol>
+
+<p>由标准位置的可打印键引起的每个浏览器的keydown事件的keycode值</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th colspan="1" rowspan="3" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th colspan="3" rowspan="1" scope="col">Internet Explorer 11</th>
+ <th colspan="6" rowspan="1" scope="col">Google Chrome 34</th>
+ <th colspan="3" rowspan="1" scope="col">Chromium 34</th>
+ <th colspan="3" rowspan="1" scope="col">Safari 7</th>
+ <th colspan="9" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ <tr>
+ <th colspan="3" rowspan="1" scope="col">Windows</th>
+ <th colspan="3" rowspan="1" scope="col">Windows</th>
+ <th colspan="3" rowspan="1" scope="col">Mac (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Linux (Ubuntu 14.04)</th>
+ <th colspan="3" rowspan="1" scope="col">Mac (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Windows</th>
+ <th colspan="3" rowspan="1" scope="col">Mac (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ <tr>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th colspan="1" scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <th colspan="1" rowspan="3" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th colspan="1" scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ </tr>
+ <tr>
+ <th colspan="3" rowspan="1" scope="col">Windows</th>
+ <th colspan="3" rowspan="1" scope="col">Windows</th>
+ <th colspan="3" rowspan="1" scope="col">Mac (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Linux (Ubuntu 14.04)</th>
+ <th colspan="3" rowspan="1" scope="col">Mac (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Windows</th>
+ <th colspan="3" rowspan="1" scope="col">Mac (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ <tr>
+ <th colspan="3" rowspan="1" scope="col">Internet Explorer 11</th>
+ <th colspan="6" rowspan="1" scope="col">Google Chrome 34</th>
+ <th colspan="3" rowspan="1" scope="col">Chromium 34</th>
+ <th colspan="3" rowspan="1" scope="col">Safari 7</th>
+ <th colspan="9" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ </tfoot>
+ <tbody>
+ <tr>
+ <th scope="row"><code>"Digit1"</code></th>
+ <td colspan="3" rowspan="1"><code>0x31 (49)</code></td>
+ <td colspan="3" rowspan="1"><code>0x31 (49)</code></td>
+ <td colspan="3" rowspan="1"><code>0x31 (49)</code></td>
+ <td colspan="3" rowspan="1"><code>0x31 (49)</code></td>
+ <td colspan="3" rowspan="1"><code>0x31 (49)</code></td>
+ <td colspan="3" rowspan="1"><code>0x31 (49)</code></td>
+ <td colspan="3" rowspan="1"><code>0x31 (49)</code></td>
+ <td colspan="3" rowspan="1"><code>0x31 (49)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Digit2"</code></th>
+ <td colspan="3" rowspan="1"><code>0x32 (50)</code></td>
+ <td colspan="3" rowspan="1"><code>0x32 (50)</code></td>
+ <td colspan="3" rowspan="1"><code>0x32 (50)</code></td>
+ <td colspan="3" rowspan="1"><code>0x32 (50)</code></td>
+ <td colspan="3" rowspan="1"><code>0x32 (50)</code></td>
+ <td colspan="3" rowspan="1"><code>0x32 (50)</code></td>
+ <td colspan="3" rowspan="1"><code>0x32 (50)</code></td>
+ <td colspan="3" rowspan="1"><code>0x32 (50)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Digit3"</code></th>
+ <td colspan="3" rowspan="1"><code>0x33 (51)</code></td>
+ <td colspan="3" rowspan="1"><code>0x33 (51)</code></td>
+ <td colspan="3" rowspan="1"><code>0x33 (51)</code></td>
+ <td colspan="3" rowspan="1"><code>0x33 (51)</code></td>
+ <td colspan="3" rowspan="1"><code>0x33 (51)</code></td>
+ <td colspan="3" rowspan="1"><code>0x33 (51)</code></td>
+ <td colspan="3" rowspan="1"><code>0x33 (51)</code></td>
+ <td colspan="3" rowspan="1"><code>0x33 (51)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Digit4"</code></th>
+ <td colspan="3" rowspan="1"><code>0x34 (52)</code></td>
+ <td colspan="3" rowspan="1"><code>0x34 (52)</code></td>
+ <td colspan="3" rowspan="1"><code>0x34 (52)</code></td>
+ <td colspan="3" rowspan="1"><code>0x34 (52)</code></td>
+ <td colspan="3" rowspan="1"><code>0x34 (52)</code></td>
+ <td colspan="3" rowspan="1"><code>0x34 (52)</code></td>
+ <td colspan="3" rowspan="1"><code>0x34 (52)</code></td>
+ <td colspan="3" rowspan="1"><code>0x34 (52)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Digit5"</code></th>
+ <td colspan="3" rowspan="1"><code>0x35 (53)</code></td>
+ <td colspan="3" rowspan="1"><code>0x35 (53)</code></td>
+ <td colspan="3" rowspan="1"><code>0x35 (53)</code></td>
+ <td colspan="3" rowspan="1"><code>0x35 (53)</code></td>
+ <td colspan="3" rowspan="1"><code>0x35 (53)</code></td>
+ <td colspan="3" rowspan="1"><code>0x35 (53)</code></td>
+ <td colspan="3" rowspan="1"><code>0x35 (53)</code></td>
+ <td colspan="3" rowspan="1"><code>0x35 (53)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Digit6"</code></th>
+ <td colspan="3" rowspan="1"><code>0x36 (54)</code></td>
+ <td colspan="3" rowspan="1"><code>0x36 (54)</code></td>
+ <td colspan="3" rowspan="1"><code>0x36 (54)</code></td>
+ <td colspan="3" rowspan="1"><code>0x36 (54)</code></td>
+ <td colspan="3" rowspan="1"><code>0x36 (54)</code></td>
+ <td colspan="3" rowspan="1"><code>0x36 (54)</code></td>
+ <td colspan="3" rowspan="1"><code>0x36 (54)</code></td>
+ <td colspan="3" rowspan="1"><code>0x36 (54)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Digit7"</code></th>
+ <td colspan="3" rowspan="1"><code>0x37 (55)</code></td>
+ <td colspan="3" rowspan="1"><code>0x37 (55)</code></td>
+ <td colspan="3" rowspan="1"><code>0x37 (55)</code></td>
+ <td colspan="3" rowspan="1"><code>0x37 (55)</code></td>
+ <td colspan="3" rowspan="1"><code>0x37 (55)</code></td>
+ <td colspan="3" rowspan="1"><code>0x37 (55)</code></td>
+ <td colspan="3" rowspan="1"><code>0x37 (55)</code></td>
+ <td colspan="3" rowspan="1"><code>0x37 (55)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Digit8"</code></th>
+ <td colspan="3" rowspan="1"><code>0x38 (56)</code></td>
+ <td colspan="3" rowspan="1"><code>0x38 (56)</code></td>
+ <td colspan="3" rowspan="1"><code>0x38 (56)</code></td>
+ <td colspan="3" rowspan="1"><code>0x38 (56)</code></td>
+ <td colspan="3" rowspan="1"><code>0x38 (56)</code></td>
+ <td colspan="3" rowspan="1"><code>0x38 (56)</code></td>
+ <td colspan="3" rowspan="1"><code>0x38 (56)</code></td>
+ <td colspan="3" rowspan="1"><code>0x38 (56)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Digit9"</code></th>
+ <td colspan="3" rowspan="1"><code>0x39 (57)</code></td>
+ <td colspan="3" rowspan="1"><code>0x39 (57)</code></td>
+ <td colspan="3" rowspan="1"><code>0x39 (57)</code></td>
+ <td colspan="3" rowspan="1"><code>0x39 (57)</code></td>
+ <td colspan="3" rowspan="1"><code>0x39 (57)</code></td>
+ <td colspan="3" rowspan="1"><code>0x39 (57)</code></td>
+ <td colspan="3" rowspan="1"><code>0x39 (57)</code></td>
+ <td colspan="3" rowspan="1"><code>0x39 (57)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Digit0"</code></th>
+ <td colspan="3" rowspan="1"><code>0x30 (48)</code></td>
+ <td colspan="3" rowspan="1"><code>0x30 (48)</code></td>
+ <td colspan="3" rowspan="1"><code>0x30 (48)</code></td>
+ <td colspan="3" rowspan="1"><code>0x30 (48)</code></td>
+ <td colspan="3" rowspan="1"><code>0x30 (48)</code></td>
+ <td colspan="3" rowspan="1"><code>0x30 (48)</code></td>
+ <td colspan="3" rowspan="1"><code>0x30 (48)</code></td>
+ <td colspan="3" rowspan="1"><code>0x30 (48)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyA"</code></th>
+ <td colspan="3" rowspan="1"><code>0x41 (65)</code></td>
+ <td colspan="3" rowspan="1"><code>0x41 (65)</code></td>
+ <td colspan="3" rowspan="1"><code>0x41 (65)</code></td>
+ <td colspan="3" rowspan="1"><code>0x41 (65)</code></td>
+ <td colspan="3" rowspan="1"><code>0x41 (65)</code></td>
+ <td colspan="3" rowspan="1"><code>0x41 (65)</code></td>
+ <td colspan="3" rowspan="1"><code>0x41 (65)</code></td>
+ <td colspan="3" rowspan="1"><code>0x41 (65)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyB"</code></th>
+ <td colspan="3" rowspan="1"><code>0x42 (66)</code></td>
+ <td colspan="3" rowspan="1"><code>0x42 (66)</code></td>
+ <td colspan="3" rowspan="1"><code>0x42 (66)</code></td>
+ <td colspan="3" rowspan="1"><code>0x42 (66)</code></td>
+ <td colspan="3" rowspan="1"><code>0x42 (66)</code></td>
+ <td colspan="3" rowspan="1"><code>0x42 (66)</code></td>
+ <td colspan="3" rowspan="1"><code>0x42 (66)</code></td>
+ <td colspan="3" rowspan="1"><code>0x42 (66)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyC"</code></th>
+ <td colspan="3" rowspan="1"><code>0x43 (67)</code></td>
+ <td colspan="3" rowspan="1"><code>0x43 (67)</code></td>
+ <td colspan="3" rowspan="1"><code>0x43 (67)</code></td>
+ <td colspan="3" rowspan="1"><code>0x43 (67)</code></td>
+ <td colspan="3" rowspan="1"><code>0x43 (67)</code></td>
+ <td colspan="3" rowspan="1"><code>0x43 (67)</code></td>
+ <td colspan="3" rowspan="1"><code>0x43 (67)</code></td>
+ <td colspan="3" rowspan="1"><code>0x43 (67)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyD"</code></th>
+ <td colspan="3" rowspan="1"><code>0x44 (68)</code></td>
+ <td colspan="3" rowspan="1"><code>0x44 (68)</code></td>
+ <td colspan="3" rowspan="1"><code>0x44 (68)<span style="display: none;"> </span></code></td>
+ <td colspan="3" rowspan="1"><code>0x44 (68)</code></td>
+ <td colspan="3" rowspan="1"><code>0x44 (68)</code></td>
+ <td colspan="3" rowspan="1"><code>0x44 (68)</code></td>
+ <td colspan="3" rowspan="1"><code>0x44 (68)</code></td>
+ <td colspan="3" rowspan="1"><code>0x44 (68)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyE"</code></th>
+ <td colspan="3" rowspan="1"><code>0x45 (69)</code></td>
+ <td colspan="3" rowspan="1"><code>0x45 (69)</code></td>
+ <td colspan="3" rowspan="1"><code>0x45 (69)</code></td>
+ <td colspan="3" rowspan="1"><code>0x45 (69)</code></td>
+ <td colspan="3" rowspan="1"><code>0x45 (69)</code></td>
+ <td colspan="3" rowspan="1"><code>0x45 (69)</code></td>
+ <td colspan="3" rowspan="1"><code>0x45 (69)</code></td>
+ <td colspan="3" rowspan="1"><code>0x45 (69)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyF"</code></th>
+ <td colspan="3" rowspan="1"><code>0x46 (70)</code></td>
+ <td colspan="3" rowspan="1"><code>0x46 (70)</code></td>
+ <td colspan="3" rowspan="1"><code>0x46 (70)</code></td>
+ <td colspan="3" rowspan="1"><code>0x46 (70)</code></td>
+ <td colspan="3" rowspan="1"><code>0x46 (70)</code></td>
+ <td colspan="3" rowspan="1"><code>0x46 (70)</code></td>
+ <td colspan="3" rowspan="1"><code>0x46 (70)</code></td>
+ <td colspan="3" rowspan="1"><code>0x46 (70)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyG"</code></th>
+ <td colspan="3" rowspan="1"><code>0x47 (71)</code></td>
+ <td colspan="3" rowspan="1"><code>0x47 (71)</code></td>
+ <td colspan="3" rowspan="1"><code>0x47 (71)</code></td>
+ <td colspan="3" rowspan="1"><code>0x47 (71)</code></td>
+ <td colspan="3" rowspan="1"><code>0x47 (71)</code></td>
+ <td colspan="3" rowspan="1"><code>0x47 (71)</code></td>
+ <td colspan="3" rowspan="1"><code>0x47 (71)</code></td>
+ <td colspan="3" rowspan="1"><code>0x47 (71)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyH"</code></th>
+ <td colspan="3" rowspan="1"><code>0x48 (72)</code></td>
+ <td colspan="3" rowspan="1"><code>0x48 (72)</code></td>
+ <td colspan="3" rowspan="1"><code>0x48 (72)</code></td>
+ <td colspan="3" rowspan="1"><code>0x48 (72)</code></td>
+ <td colspan="3" rowspan="1"><code>0x48 (72)</code></td>
+ <td colspan="3" rowspan="1"><code>0x48 (72)</code></td>
+ <td colspan="3" rowspan="1"><code>0x48 (72)</code></td>
+ <td colspan="3" rowspan="1"><code>0x48 (72)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyI"</code></th>
+ <td colspan="3" rowspan="1"><code>0x49 (73)</code></td>
+ <td colspan="3" rowspan="1"><code>0x49 (73)</code></td>
+ <td colspan="3" rowspan="1"><code>0x49 (73)</code></td>
+ <td colspan="3" rowspan="1"><code>0x49 (73)</code></td>
+ <td colspan="3" rowspan="1"><code>0x49 (73)</code></td>
+ <td colspan="3" rowspan="1"><code>0x49 (73)</code></td>
+ <td colspan="3" rowspan="1"><code>0x49 (73)</code></td>
+ <td colspan="3" rowspan="1"><code>0x49 (73)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyJ"</code></th>
+ <td colspan="3" rowspan="1"><code>0x4A (74)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4A (74)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4A (74)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4A (74)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4A (74)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4A (74)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4A (74)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4A (74)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyK"</code></th>
+ <td colspan="3" rowspan="1"><code>0x4B (75)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4B (75)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4B (75)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4B (75)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4B (75)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4B (75)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4B (75)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4B (75)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyL"</code></th>
+ <td colspan="3" rowspan="1"><code>0x4C (76)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4C (76)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4C (76)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4C (76)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4C (76)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4C (76)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4C (76)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4C (76)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyM"</code></th>
+ <td colspan="3" rowspan="1"><code>0x4D (77)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4D (77)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4D (77)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4D (77)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4D (77)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4D (77)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4D (77)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4D (77)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyN"</code></th>
+ <td colspan="3" rowspan="1"><code>0x4E (78)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4E (78)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4E (78)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4E (78)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4E (78)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4E (78)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4E (78)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4E (78)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyO"</code></th>
+ <td colspan="3" rowspan="1"><code>0x4F (79)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4F (79)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4F (79)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4F (79)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4F (79)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4F (79)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4F (79)</code></td>
+ <td colspan="3" rowspan="1"><code>0x4F (79)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyP"</code></th>
+ <td colspan="3" rowspan="1"><code>0x50 (80)</code></td>
+ <td colspan="3" rowspan="1"><code>0x50 (80)</code></td>
+ <td colspan="3" rowspan="1"><code>0x50 (80)</code></td>
+ <td colspan="3" rowspan="1"><code>0x50 (80)</code></td>
+ <td colspan="3" rowspan="1"><code>0x50 (80)</code></td>
+ <td colspan="3" rowspan="1"><code>0x50 (80)</code></td>
+ <td colspan="3" rowspan="1"><code>0x50 (80)</code></td>
+ <td colspan="3" rowspan="1"><code>0x50 (80)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyQ"</code></th>
+ <td colspan="3" rowspan="1"><code>0x51 (81)</code></td>
+ <td colspan="3" rowspan="1"><code>0x51 (81)</code></td>
+ <td rowspan="1"><code>0x51 (81)</code></td>
+ <td rowspan="1"><code>0x51 (81)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBA (186)</code></td>
+ <td><code>0x51 (81)</code></td>
+ <td><code>0x51 (81)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBA (186)</code></td>
+ <td rowspan="1"><code>0x51 (81)</code></td>
+ <td rowspan="1"><code>0x51 (81)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBA (186)</code></td>
+ <td colspan="3" rowspan="1"><code>0x51 (81)</code></td>
+ <td><code>0x51 (81)</code></td>
+ <td><code>0x51 (81)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBA (186)</code></td>
+ <td colspan="3" rowspan="1"><code>0x51 (81)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyR"</code></th>
+ <td colspan="3" rowspan="1"><code>0x52 (82)</code></td>
+ <td colspan="3" rowspan="1"><code>0x52 (82)</code></td>
+ <td colspan="3" rowspan="1"><code>0x52 (82)</code></td>
+ <td colspan="3" rowspan="1"><code>0x52 (82)</code></td>
+ <td colspan="3" rowspan="1"><code>0x52 (82)</code></td>
+ <td colspan="3" rowspan="1"><code>0x52 (82)</code></td>
+ <td colspan="3" rowspan="1"><code>0x52 (82)</code></td>
+ <td colspan="3" rowspan="1"><code>0x52 (82)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyS"</code></th>
+ <td colspan="3" rowspan="1"><code>0x53 (83)</code></td>
+ <td colspan="3" rowspan="1"><code>0x53 (83)</code></td>
+ <td colspan="3" rowspan="1"><code>0x53 (83)</code></td>
+ <td colspan="3" rowspan="1"><code>0x53 (83)</code></td>
+ <td colspan="3" rowspan="1"><code>0x53 (83)</code></td>
+ <td colspan="3" rowspan="1"><code>0x53 (83)</code></td>
+ <td colspan="3" rowspan="1"><code>0x53 (83)</code></td>
+ <td colspan="3" rowspan="1"><code>0x53 (83)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyT"</code></th>
+ <td colspan="3" rowspan="1"><code>0x54 (84)</code></td>
+ <td colspan="3" rowspan="1"><code>0x54 (84)</code></td>
+ <td colspan="3" rowspan="1"><code>0x54 (84)</code></td>
+ <td colspan="3" rowspan="1"><code>0x54 (84)</code></td>
+ <td colspan="3" rowspan="1"><code>0x54 (84)</code></td>
+ <td colspan="3" rowspan="1"><code>0x54 (84)</code></td>
+ <td colspan="3" rowspan="1"><code>0x54 (84)</code></td>
+ <td colspan="3" rowspan="1"><code>0x54 (84)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyU"</code></th>
+ <td colspan="3" rowspan="1"><code>0x55 (85)</code></td>
+ <td colspan="3" rowspan="1"><code>0x55 (85)</code></td>
+ <td colspan="3" rowspan="1"><code>0x55 (85)</code></td>
+ <td colspan="3" rowspan="1"><code>0x55 (85)</code></td>
+ <td colspan="3" rowspan="1"><code>0x55 (85)</code></td>
+ <td colspan="3" rowspan="1"><code>0x55 (85)</code></td>
+ <td colspan="3" rowspan="1"><code>0x55 (85)</code></td>
+ <td colspan="3" rowspan="1"><code>0x55 (85)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyV"</code></th>
+ <td colspan="3" rowspan="1"><code>0x56 (86)</code></td>
+ <td colspan="3" rowspan="1"><code>0x56 (86)</code></td>
+ <td colspan="3" rowspan="1"><code>0x56 (86)</code></td>
+ <td colspan="3" rowspan="1"><code>0x56 (86)</code></td>
+ <td colspan="3" rowspan="1"><code>0x56 (86)</code></td>
+ <td colspan="3" rowspan="1"><code>0x56 (86)</code></td>
+ <td colspan="3" rowspan="1"><code>0x56 (86)</code></td>
+ <td colspan="3" rowspan="1"><code>0x56 (86)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyW"</code></th>
+ <td colspan="3" rowspan="1"><code>0x57 (87)</code></td>
+ <td colspan="3" rowspan="1"><code>0x57 (87)</code></td>
+ <td colspan="3" rowspan="1"><code>0x57 (87)</code></td>
+ <td colspan="3" rowspan="1"><code>0x57 (87)</code></td>
+ <td colspan="3" rowspan="1"><code>0x57 (87)</code></td>
+ <td colspan="3" rowspan="1"><code>0x57 (87)</code></td>
+ <td colspan="3" rowspan="1"><code>0x57 (87)</code></td>
+ <td colspan="3" rowspan="1"><code>0x57 (87)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyX"</code></th>
+ <td colspan="3" rowspan="1"><code>0x58 (88)</code></td>
+ <td colspan="3" rowspan="1"><code>0x58 (88)</code></td>
+ <td colspan="3" rowspan="1"><code>0x58 (88)</code></td>
+ <td colspan="3" rowspan="1"><code>0x58 (88)</code></td>
+ <td colspan="3" rowspan="1"><code>0x58 (88)</code></td>
+ <td colspan="3" rowspan="1"><code>0x58 (88)</code></td>
+ <td colspan="3" rowspan="1"><code>0x58 (88)</code></td>
+ <td colspan="3" rowspan="1"><code>0x58 (88)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyY"</code></th>
+ <td colspan="3" rowspan="1"><code>0x59 (89)</code></td>
+ <td colspan="3" rowspan="1"><code>0x59 (89)</code></td>
+ <td colspan="3" rowspan="1"><code>0x59 (89)</code></td>
+ <td colspan="3" rowspan="1"><code>0x59 (89)</code></td>
+ <td colspan="3" rowspan="1"><code>0x59 (89)</code></td>
+ <td colspan="3" rowspan="1"><code>0x59 (89)</code></td>
+ <td colspan="3" rowspan="1"><code>0x59 (89)</code></td>
+ <td colspan="3" rowspan="1"><code>0x59 (89)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"KeyZ"</code></th>
+ <td colspan="3" rowspan="1"><code>0x5A (90)</code></td>
+ <td colspan="3" rowspan="1"><code>0x5A (90)</code></td>
+ <td colspan="3" rowspan="1"><code>0x5A (90)</code></td>
+ <td colspan="3" rowspan="1"><code>0x5A (90)</code></td>
+ <td colspan="3" rowspan="1"><code>0x5A (90)</code></td>
+ <td colspan="3" rowspan="1"><code>0x5A (90)</code></td>
+ <td colspan="3" rowspan="1"><code>0x5A (90)</code></td>
+ <td colspan="3" rowspan="1"><code>0x5A (90)</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>由标准位置的可打印键(US布局中的标点符号)引起的每个浏览器的keydown事件的keycode值:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th colspan="1" rowspan="3" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th colspan="3" rowspan="1" scope="col">Internet Explorer 11</th>
+ <th colspan="6" rowspan="1" scope="col">Google Chrome 34</th>
+ <th colspan="3" rowspan="1" scope="col">Chromium 34</th>
+ <th colspan="3" rowspan="1" scope="col">Safari 7</th>
+ <th colspan="9" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ <tr>
+ <th colspan="3" rowspan="1" scope="col">Windows</th>
+ <th colspan="3" rowspan="1" scope="col">Windows</th>
+ <th colspan="3" rowspan="1" scope="col">Mac (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Linux (Ubuntu 14.04)</th>
+ <th colspan="3" rowspan="1" scope="col">Mac (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Windows (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Mac (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ <tr>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th colspan="1" scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <th colspan="1" rowspan="3" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ <th colspan="1" scope="col">US</th>
+ <th scope="col">Japanese</th>
+ <th scope="col">Greek</th>
+ </tr>
+ <tr>
+ <th colspan="3" rowspan="1" scope="col">Windows</th>
+ <th colspan="3" rowspan="1" scope="col">Windows</th>
+ <th colspan="3" rowspan="1" scope="col">Mac (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Linux (Ubuntu 14.04)</th>
+ <th colspan="3" rowspan="1" scope="col">Mac (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Windows</th>
+ <th colspan="3" rowspan="1" scope="col">Mac (10.9)</th>
+ <th colspan="3" rowspan="1" scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ <tr>
+ <th colspan="3" rowspan="1" scope="col">Internet Explorer 11</th>
+ <th colspan="6" rowspan="1" scope="col">Google Chrome 34</th>
+ <th colspan="3" rowspan="1" scope="col">Chromium 34</th>
+ <th colspan="3" rowspan="1" scope="col">Safari 7</th>
+ <th colspan="9" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ </tfoot>
+ <tbody>
+ <tr>
+ <th scope="row"><code>"Comma"</code></th>
+ <td colspan="3" rowspan="2"><code>0xBC (188)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBC (188)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBC (188)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBC (188)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBC (188)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBC (188)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBC (188)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBC (188)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Comma"</code> with <kbd>Shift</kbd></th>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Period"</code></th>
+ <td colspan="3" rowspan="2"><code>0xBE (190)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBE (190)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBE (190)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBE (190)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBE (190)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBE (190)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBE (190)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBE (190)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Period"</code> with <kbd>Shift</kbd></th>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Semicolon"</code></th>
+ <td colspan="1" rowspan="2"><code>0xBA (186)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xBB (187)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBA (186)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBA (186)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xBB (187)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBA (186)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBA (186)</code></td>
+ <td><code>0xBA (186)</code> *1</td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xE5 (229) *2</code></td>
+ <td colspan="1" rowspan="2"><code>0xBA (186)</code></td>
+ <td><code>0xBA (186)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xE5 (229) *3</code></td>
+ <td colspan="1" rowspan="2"><code>0xBA (186)</code></td>
+ <td><code>0xBA (186)</code> *1</td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xE5 (229) *2</code></td>
+ <td colspan="1" rowspan="2"><code>0x3B (59)</code></td>
+ <td colspan="1" rowspan="2"><code>0x3B (59)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code></td>
+ <td colspan="1" rowspan="2"><code>0x3B (59)</code></td>
+ <td colspan="1" rowspan="2"><code>0x3B (59)</code> *1</td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code></td>
+ <td colspan="1" rowspan="2"><code>0x3B (59)</code></td>
+ <td colspan="1" rowspan="2"><code>0x3B (59)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Semicolon"</code> with <kbd>Shift</kbd></th>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xBB (187) </code>*1</td>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xBB (187)</code></td>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xBB (187)</code> *1</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Quote"</code></th>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xBA (186)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xBA (186)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBA (186) *1</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBA (186)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBA (186)</code>  *1</td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0x3A (58)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0x3A (58)</code> *1</td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0x3A (58)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDE (222)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Quote"</code> with Shift</th>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xDE (222)</code> *1</td>
+ <td style="background-color: rgb(255, 204, 255);"><code>0x38 (56)</code></td>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xDE (222)</code> *1</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"BracketLeft"</code></th>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xC0(192)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xC0(192)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td><code>0xDB (219)</code> *1</td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x32 (50)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td><code>0xDB (219) *1 </code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0x40 (64)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0x40 (64)</code> *1</td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0x40 (64)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDB (219)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"BracketLeft"</code> with <kbd>Shift</kbd></th>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xC0 (192) *1</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xC0 (192)</code></td>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xC0 (192) *1</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"BracketRight"</code></th>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDB (219) *1</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDB (219) *1</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDB (219)</code> *1</td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDB (219)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDD (221)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"BracketRight"</code> with <kbd>Shift</kbd></th>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Backquote"</code></th>
+ <td colspan="1" rowspan="2"><code>0xC0 (192)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(153, 153, 153);"><code>N/A</code></td>
+ <td colspan="1" rowspan="2"><code>0xC0 (192)</code></td>
+ <td colspan="1" rowspan="2"><code>0xC0 (192)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(153, 153, 153);"><code>N/A</code></td>
+ <td colspan="1" rowspan="2"><code>0xC0 (192)</code></td>
+ <td colspan="3" rowspan="2"><code>0xC0 (192)</code></td>
+ <td colspan="1" rowspan="2"><code>0xC0 (192)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xF4 (244)</code></td>
+ <td colspan="1" rowspan="2"><code>0xC0 (192)</code></td>
+ <td colspan="3" rowspan="2"><code>0xC0 (192)</code></td>
+ <td colspan="1" rowspan="2"><code>0xC0 (192)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(153, 153, 153);"><code>N/A</code></td>
+ <td colspan="1" rowspan="2"><code>0xC0 (192)</code></td>
+ <td colspan="3" rowspan="2"><code>0xC0 (192)</code></td>
+ <td colspan="1" rowspan="2"><code>0xC0 (192)</code></td>
+ <td colspan="1" rowspan="2"><code>0x00 (0)</code></td>
+ <td colspan="1" rowspan="2"><code>0xC0 (192)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Backquote"</code> with <kbd>Shift</kbd></th>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Backslash"</code></th>
+ <td colspan="1" rowspan="2"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDC (220)</code></td>
+ <td colspan="3" rowspan="2"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDC (220)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDC (220)</code></td>
+ <td colspan="3" rowspan="2"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDC (220)</code></td>
+ <td colspan="3" rowspan="2"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDC (220)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDD (221)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDC (220)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Backslash"</code> with <kbd>Shift</kbd></th>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Minus"</code></th>
+ <td colspan="3" rowspan="2"><code>0xBD (189)</code></td>
+ <td colspan="3" rowspan="2"><code>0xBD (189)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBD (189)</code></td>
+ <td><code>0xBD (189)</code> *1</td>
+ <td colspan="1" rowspan="2"><code>0xBD (189)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBD (189)</code></td>
+ <td><code>0xBD (189)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBD (189)</code></td>
+ <td rowspan="1"><code>0xBD (189)</code></td>
+ <td rowspan="1"><code>0xBD (189) *1</code></td>
+ <td rowspan="1"><code>0xBD (189)</code></td>
+ <td colspan="3" rowspan="2"><code>0xAD (173)</code></td>
+ <td rowspan="2"><code>0xAD (173)</code></td>
+ <td rowspan="2"><code>0xAD (173) *1</code></td>
+ <td rowspan="2"><code>0xAD (173)</code></td>
+ <td colspan="3" rowspan="2"><code>0xAD (173)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Minus"</code> with <kbd>Shift</kbd></th>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xBB (187)</code> *1</td>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xBB (187)</code></td>
+ <td><code>0xBD (189)</code></td>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xBB (187) *1</code></td>
+ <td><code>0xBD (189)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Equal"</code></th>
+ <td colspan="1" rowspan="2"><code>0xBB (187)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDE (222)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBB (187)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBB (187)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDE (222)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBB (187)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBB (187)</code></td>
+ <td><code>0xBB (187) *1</code></td>
+ <td colspan="1" rowspan="2"><code>0xBB (187)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBB (187)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x36 (54)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBB (187)</code></td>
+ <td rowspan="1"><code>0xBB (187)</code></td>
+ <td rowspan="1"><code>0xBB (187) *1</code></td>
+ <td rowspan="1"><code>0xBB (187)</code></td>
+ <td colspan="1" rowspan="2"><code>0x3D (61)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xA0 (160)</code></td>
+ <td colspan="1" rowspan="2"><code>0x3D (61)</code></td>
+ <td colspan="1" rowspan="2"><code>0x3D (61)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xA0 (160)</code> *1</td>
+ <td colspan="1" rowspan="2"><code>0x3D (61)</code></td>
+ <td rowspan="2"><code>0x3D (61)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xA0 (160)</code></td>
+ <td colspan="1" rowspan="2"><code>0x3D (61)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Equal"</code> with <kbd>Shift</kbd></th>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xC0 (192) *1</code></td>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xC0 (192)</code></td>
+ <td><code>0xBB (187)</code></td>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xC0 (192) *1</code></td>
+ <td><code>0xBB (187)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"IntlRo"</code></th>
+ <td colspan="1" rowspan="2"><code>0xC1 (193)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xE2 (226)</code></td>
+ <td colspan="1" rowspan="2"><code>0xC1 (193)</code></td>
+ <td colspan="1" rowspan="2"><code>0xC1 (193)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xE2 (226)</code></td>
+ <td colspan="1" rowspan="2"><code>0xC1 (193)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBD (189)</code></td>
+ <td colspan="1" rowspan="2"><code>0xBD (189)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code></td>
+ <td colspan="1" rowspan="2">*4</td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDC (220)</code><br>
+  </td>
+ <td colspan="1" rowspan="2">*4</td>
+ <td rowspan="2"><code>0xBD (189)</code></td>
+ <td rowspan="2"><code>0xBD (189)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xE5 </code>(229) *5</td>
+ <td colspan="1" rowspan="2"><code>0x00 (0)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2"><code>0x00 (0)</code></td>
+ <td colspan="1" rowspan="2"><code>0xA7 (167)</code></td>
+ <td colspan="1" rowspan="2"><code>0xA7 (167)</code></td>
+ <td colspan="1" rowspan="2"><code>0x00 (0)</code></td>
+ <td colspan="1" rowspan="2"><code>0x00 (0)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2"><code>0x00 (0)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"IntlRo"</code> with <kbd>Shift</kbd></th>
+ </tr>
+ <tr>
+ <th scope="row"><code>"IntlYen"</code></th>
+ <td colspan="1" rowspan="2"><code>0xFF (255)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2"><code>0xFF (255)</code></td>
+ <td colspan="1" rowspan="2"><code>0xFF (255)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2"><code>0xFF (255)</code></td>
+ <td><code>0x00 (0)</code></td>
+ <td><code>0x00 (0)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code></td>
+ <td colspan="1" rowspan="2">*4</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2">*4</td>
+ <td rowspan="1"><code>0x00 (0)</code></td>
+ <td rowspan="1"><code>0x00 (0)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xE5 </code>(229) *5</td>
+ <td colspan="1" rowspan="2"><code>0x00 (0)</code></td>
+ <td colspan="1" rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDC </code>(220)</td>
+ <td colspan="1" rowspan="2"><code>0x00 (0)</code></td>
+ <td colspan="1" rowspan="2"><code>0xDC </code>(220)</td>
+ <td colspan="1" rowspan="2"><code>0xDC </code>(220)</td>
+ <td colspan="1" rowspan="2"><code>0x00 (0)</code></td>
+ <td colspan="1" rowspan="2"><code>0x00 (0)</code></td>
+ <td rowspan="2" style="background-color: rgb(255, 255, 204);"><code>0xDC (220)</code></td>
+ <td colspan="1" rowspan="2"><code>0x00 (0)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"IntlYen"</code> with <kbd>Shift</kbd></th>
+ <td><code>0xDC (220)</code></td>
+ <td><code>0xDC (220)</code></td>
+ <td style="background-color: rgb(255, 204, 255);"><code>0xBD (189)</code></td>
+ <td><code>0xDC (220)</code></td>
+ <td><code>0xDC (220)</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>*1该值是从JIS键盘输入的。使用ANSI键盘时,键代码值和输入字符是从美国键盘布局中选择的。<br>
+ *2按键是一个死键。keyup事件的值是0xba(186)。<br>
+ *3按键是一个死键。keyup事件的值为0x10(16)。<br>
+ *4没有触发任何按键事件。<br>
+ *5该键在希腊键盘布局中不可用(不输入任何字符)。keyup事件的值为0x00(0)。</p>
+
+<h3 id="不可打印键(功能键)">不可打印键(功能键)</h3>
+
+<table class="standard-table">
+ <caption>由修改键引起的每个浏览器的keydown事件的keycode值:</caption>
+ <thead>
+ <tr>
+ <th colspan="1" rowspan="2" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th scope="col">Internet Explorer 11</th>
+ <th colspan="2" rowspan="1" scope="col">Google Chrome 34</th>
+ <th scope="col">Chromium 34</th>
+ <th scope="col">Safari 7</th>
+ <th colspan="3" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ <tr>
+ <th scope="col">Windows</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <th colspan="1" rowspan="2" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ <tr>
+ <th scope="col">Internet Explorer 11</th>
+ <th colspan="2" rowspan="1" scope="col">Google Chrome 34</th>
+ <th scope="col">Chromium 34</th>
+ <th scope="col">Safari 7</th>
+ <th colspan="3" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ </tfoot>
+ <tbody>
+ <tr>
+ <th scope="row"><code>"AltLeft"</code></th>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"AltRight"</code></th>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ <td><code>0x12 (18)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"AltRight"</code> when it's <code>"AltGraph"</code> key</th>
+ <td>*1</td>
+ <td>*1</td>
+ <td style="background-color: rgb(153, 153, 153);">N/A</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xE1 (225)</code></td>
+ <td style="background-color: rgb(153, 153, 153);">N/A</td>
+ <td>*1</td>
+ <td style="background-color: rgb(153, 153, 153);">N/A</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xE1 (225)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"CapsLock"</code></th>
+ <td><code>0x14 (20)</code> *2</td>
+ <td><code>0x14 (20)</code> *2</td>
+ <td><code>0x14 (20)</code></td>
+ <td><code>0x14 (20)</code></td>
+ <td><code>0x14 (20)</code></td>
+ <td><code>0x14 (20)</code> *2</td>
+ <td><code>0x14 (20)</code></td>
+ <td><code>0x14 (20)</code> *3</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"ControlLeft"</code></th>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"ControlRight"</code></th>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ <td><code>0x11 (17)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"OSLeft"</code></th>
+ <td><code>0x5B (91)</code></td>
+ <td><code>0x5B (91)</code></td>
+ <td><code>0x5B (91)</code></td>
+ <td><code>0x5B (91)</code></td>
+ <td><code>0x5B (91)</code></td>
+ <td><code>0x5B (91)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xE0 (224)</code></td>
+ <td><code>0x5B (91)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"OSRight"</code></th>
+ <td><code>0x5C (92)</code></td>
+ <td><code>0x5C (92)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x5D (93)</code></td>
+ <td><code>0x5C (92)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x5D (93)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x5B (91)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xE0 (224)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x5B (91)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"ShiftLeft"</code></th>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"ShiftRight"</code></th>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ <td><code>0x10 (16)</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>*1在Windows上,“altgraph”键导致“controlLeft”键事件和“altRight”键事件。<br>
+ *2当日语键盘布局处于活动状态时,“capslock”键没有 <kbd>Shift</kbd> 会导致0xf0(240)。该键作为“<code>Alphanumeric</code>”键工作,其标签为“英数”。<br>
+ *3当日语键盘布局处于活动状态时,“capslock”键没有 <kbd>Shift</kbd> 会导致0x00(0)。该键作为“<code>Alphanumeric</code>”键工作,其标签为“英数”。</p>
+
+<p>由不可打印的键引起的每个浏览器的keydown事件的keycode值:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th colspan="1" rowspan="2" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th scope="col">Internet Explorer 11</th>
+ <th colspan="2" rowspan="1" scope="col">Google Chrome 34</th>
+ <th scope="col">Chromium 34</th>
+ <th scope="col">Safari 7</th>
+ <th colspan="3" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ <tr>
+ <th scope="col">Windows</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <th colspan="1" rowspan="2" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ <tr>
+ <th scope="col">Internet Explorer 11</th>
+ <th colspan="2" rowspan="1" scope="col">Google Chrome 34</th>
+ <th scope="col">Chromium 34</th>
+ <th scope="col">Safari 7</th>
+ <th colspan="3" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ </tfoot>
+ <tbody>
+ <tr>
+ <th scope="row"><code>"ContextMenu"</code></th>
+ <td><code>0x5D (93)</code></td>
+ <td><code>0x5D (93)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *1</td>
+ <td><code>0x5D (93)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *1</td>
+ <td><code>0x5D (93)</code></td>
+ <td><code>0x5D (93)</code></td>
+ <td><code>0x5D (93)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Enter"</code></th>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Space"</code></th>
+ <td><code>0x20 (32)</code></td>
+ <td><code>0x20 (32)</code></td>
+ <td><code>0x20 (32)</code></td>
+ <td><code>0x20 (32)</code></td>
+ <td><code>0x20 (32)</code></td>
+ <td><code>0x20 (32)</code></td>
+ <td><code>0x20 (32)</code></td>
+ <td><code>0x20 (32)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Tab"</code></th>
+ <td><code>0x09 (9)</code></td>
+ <td><code>0x09 (9)</code></td>
+ <td><code>0x09 (9)</code></td>
+ <td><code>0x09 (9)</code></td>
+ <td><code>0x09 (9)</code></td>
+ <td><code>0x09 (9)</code></td>
+ <td><code>0x09 (9)</code></td>
+ <td><code>0x09 (9)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Delete"</code></th>
+ <td><code>0x2E (46)</code></td>
+ <td><code>0x2E (46)</code></td>
+ <td><code>0x2E (46)</code></td>
+ <td><code>0x2E (46)</code></td>
+ <td><code>0x2E (46)</code></td>
+ <td><code>0x2E (46)</code></td>
+ <td><code>0x2E (46)</code></td>
+ <td><code>0x2E (46)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"End"</code></th>
+ <td><code>0x23 (35)</code></td>
+ <td><code>0x23 (35)</code></td>
+ <td><code>0x23 (35)</code></td>
+ <td><code>0x23 (35)</code></td>
+ <td><code>0x23 (35)</code></td>
+ <td><code>0x23 (35)</code></td>
+ <td><code>0x23 (35)</code></td>
+ <td><code>0x23 (35)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Help"</code></th>
+ <td style="background-color: rgb(153, 153, 153);">N/A</td>
+ <td style="background-color: rgb(153, 153, 153);">N/A</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x2D (45)</code> *2</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x2F (47)</code> *3</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x2D (45)</code> *2</td>
+ <td style="background-color: rgb(153, 153, 153);">N/A</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x2D (45)</code> *2</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x06 (6)</code> *3</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Home"</code></th>
+ <td><code>0x24 (36)</code></td>
+ <td><code>0x24 (36)</code></td>
+ <td><code>0x24 (36)</code></td>
+ <td><code>0x24 (36)</code></td>
+ <td><code>0x24 (36)</code></td>
+ <td><code>0x24 (36)</code></td>
+ <td><code>0x24 (36)</code></td>
+ <td><code>0x24 (36)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Insert"</code></th>
+ <td><code>0x2D (45)</code></td>
+ <td><code>0x2D (45)</code></td>
+ <td><code>0x2D (45)</code></td>
+ <td><code>0x2D (45)</code></td>
+ <td><code>0x2D (45)</code></td>
+ <td><code>0x2D (45)</code></td>
+ <td><code>0x2D (45)</code></td>
+ <td><code>0x2D (45)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"PageDown"</code></th>
+ <td><code>0x22 (34)</code></td>
+ <td><code>0x22 (34)</code></td>
+ <td><code>0x22 (34)</code></td>
+ <td><code>0x22 (34)</code></td>
+ <td><code>0x22 (34)</code></td>
+ <td><code>0x22 (34)</code></td>
+ <td><code>0x22 (34)</code></td>
+ <td><code>0x22 (34)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"PageUp"</code></th>
+ <td><code>0x21 (33)</code></td>
+ <td><code>0x21 (33)</code></td>
+ <td><code>0x21 (33)</code></td>
+ <td><code>0x21 (33)</code></td>
+ <td><code>0x21 (33)</code></td>
+ <td><code>0x21 (33)</code></td>
+ <td><code>0x21 (33)</code></td>
+ <td><code>0x21 (33)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"ArrowDown"</code></th>
+ <td><code>0x28 (40)</code></td>
+ <td><code>0x28 (40)</code></td>
+ <td><code>0x28 (40)</code></td>
+ <td><code>0x28 (40)</code></td>
+ <td><code>0x28 (40)</code></td>
+ <td><code>0x28 (40)</code></td>
+ <td><code>0x28 (40)</code></td>
+ <td><code>0x28 (40)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"ArrowLeft"</code></th>
+ <td><code>0x25 (37)</code></td>
+ <td><code>0x25 (37)</code></td>
+ <td><code>0x25 (37)</code></td>
+ <td><code>0x25 (37)</code></td>
+ <td><code>0x25 (37)</code></td>
+ <td><code>0x25 (37)</code></td>
+ <td><code>0x25 (37)</code></td>
+ <td><code>0x25 (37)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"ArrowRight"</code></th>
+ <td><code>0x27 (39)</code></td>
+ <td><code>0x27 (39)</code></td>
+ <td><code>0x27 (39)</code></td>
+ <td><code>0x27 (39)</code></td>
+ <td><code>0x27 (39)</code></td>
+ <td><code>0x27 (39)</code></td>
+ <td><code>0x27 (39)</code></td>
+ <td><code>0x27 (39)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"ArrowUp"</code></th>
+ <td><code>0x26 (38)</code></td>
+ <td><code>0x26 (38)</code></td>
+ <td><code>0x26 (38)</code></td>
+ <td><code>0x26 (38)</code></td>
+ <td><code>0x26 (38)</code></td>
+ <td><code>0x26 (38)</code></td>
+ <td><code>0x26 (38)</code></td>
+ <td><code>0x26 (38)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Escape"</code></th>
+ <td><code>0x1B (27)</code></td>
+ <td><code>0x1B (27)</code></td>
+ <td><code>0x1B (27)</code></td>
+ <td><code>0x1B (27)</code></td>
+ <td><code>0x1B (27)</code></td>
+ <td><code>0x1B (27)</code></td>
+ <td><code>0x1B (27)</code></td>
+ <td><code>0x1B (27)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"PrintScreen"</code></th>
+ <td><code>0x2C (44)</code> *4</td>
+ <td><code>0x2C (44)</code> *4</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x7C (124)</code>*5</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x2A (42)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x7C (124)</code>*5</td>
+ <td><code>0x2C (44)</code> *4</td>
+ <td><code>0x2C (44)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x2A (42)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"ScrollLock"</code></th>
+ <td><code>0x91 (145)</code></td>
+ <td><code>0x91 (145)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x7D (125)</code>*5</td>
+ <td><code>0x91 (145)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x7D (125)</code>*5</td>
+ <td><code>0x91 (145)</code></td>
+ <td><code>0x91 (145)</code></td>
+ <td><code>0x91 (145)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Pause"</code></th>
+ <td><code>0x13 (19)</code> *6</td>
+ <td><code>0x13 (19)</code> *6</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x7E (126)</code>*5</td>
+ <td><code>0x13 (19)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x7E (126)</code>*5</td>
+ <td><code>0x13 (19)</code> *6</td>
+ <td><code>0x13 (19)</code></td>
+ <td><code>0x13 (19)</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>*1 keypress事件被激发,其keypcode和charcode为0x10(16),但文本未输入编辑器。<br>
+ *2在Mac电脑上,“<code>Help</code>”键映射到电脑键盘的“<code>Insert</code>”键。这些<code>keyCode</code> 值与“<code>Insert</code>”键的<code>keyCode</code>值相同。<br>
+ *3在Fedora 20上测试。<br>
+ *4仅激发keyup事件。<br>
+ *5 PC的“<code>PrintScreen</code>”、“<code>ScrollLock</code>”和“<code>Pause</code>”映射到Mac的“F13”、“F14”和“F15”。Chrome和Safari用Mac的键映射相同的<code>keyCode</code>值。<br>
+ *6“<code>Pause</code>”键加上 <kbd>Control</kbd> 导致0x03(3)。</p>
+
+<p>由功能键引起的每个浏览器的keydown事件的keycode值:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th colspan="1" rowspan="2" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th scope="col">Internet Explorer 11</th>
+ <th colspan="2" rowspan="1" scope="col">Google Chrome 34</th>
+ <th scope="col">Chromium 34</th>
+ <th scope="col">Safari 7</th>
+ <th colspan="3" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ <tr>
+ <th scope="col">Windows</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <th colspan="1" rowspan="2" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ <tr>
+ <th scope="col">Internet Explorer 11</th>
+ <th colspan="2" rowspan="1" scope="col">Google Chrome 34</th>
+ <th scope="col">Chromium 34</th>
+ <th scope="col">Safari 7</th>
+ <th colspan="3" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ </tfoot>
+ <tbody>
+ <tr>
+ <th scope="row"><code>"F1"</code></th>
+ <td><code>0x70 (112)</code></td>
+ <td><code>0x70 (112)</code></td>
+ <td><code>0x70 (112)</code></td>
+ <td><code>0x70 (112)</code></td>
+ <td><code>0x70 (112)</code></td>
+ <td><code>0x70 (112)</code></td>
+ <td><code>0x70 (112)</code></td>
+ <td><code>0x70 (112)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F2"</code></th>
+ <td><code>0x71 (113)</code></td>
+ <td><code>0x71 (113)</code></td>
+ <td><code>0x71 (113)</code></td>
+ <td><code>0x71 (113)</code></td>
+ <td><code>0x71 (113)</code></td>
+ <td><code>0x71 (113)</code></td>
+ <td><code>0x71 (113)</code></td>
+ <td><code>0x71 (113)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F3"</code></th>
+ <td><code>0x72 (114)</code></td>
+ <td><code>0x72 (114)</code></td>
+ <td><code>0x72 (114)</code></td>
+ <td><code>0x72 (114)</code></td>
+ <td><code>0x72 (114)</code></td>
+ <td><code>0x72 (114)</code></td>
+ <td><code>0x72 (114)</code></td>
+ <td><code>0x72 (114)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F4"</code></th>
+ <td><code>0x73 (115)</code></td>
+ <td><code>0x73 (115)</code></td>
+ <td><code>0x73 (115)</code></td>
+ <td><code>0x73 (115)</code></td>
+ <td><code>0x73 (115)</code></td>
+ <td><code>0x73 (115)</code></td>
+ <td><code>0x73 (115)</code></td>
+ <td><code>0x73 (115)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F5"</code></th>
+ <td><code>0x74 (116)</code></td>
+ <td><code>0x74 (116)</code></td>
+ <td><code>0x74 (116)</code></td>
+ <td><code>0x74 (116)</code></td>
+ <td><code>0x74 (116)</code></td>
+ <td><code>0x74 (116)</code></td>
+ <td><code>0x74 (116)</code></td>
+ <td><code>0x74 (116)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F6"</code></th>
+ <td><code>0x75 (117)</code></td>
+ <td><code>0x75 (117)</code></td>
+ <td><code>0x75 (117)</code></td>
+ <td><code>0x75 (117)</code></td>
+ <td><code>0x75 (117)</code></td>
+ <td><code>0x75 (117)</code></td>
+ <td><code>0x75 (117)</code></td>
+ <td><code>0x75 (117)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F7"</code></th>
+ <td><code>0x76 (118)</code></td>
+ <td><code>0x76 (118)</code></td>
+ <td><code>0x76 (118)</code></td>
+ <td><code>0x76 (118)</code></td>
+ <td><code>0x76 (118)</code></td>
+ <td><code>0x76 (118)</code></td>
+ <td><code>0x76 (118)</code></td>
+ <td><code>0x76 (118)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F8"</code></th>
+ <td><code>0x77 (119)</code></td>
+ <td><code>0x77 (119)</code></td>
+ <td><code>0x77 (119)</code></td>
+ <td><code>0x77 (119)</code></td>
+ <td><code>0x77 (119)</code></td>
+ <td><code>0x77 (119)</code></td>
+ <td><code>0x77 (119)</code></td>
+ <td><code>0x77 (119)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F9"</code></th>
+ <td><code>0x78 (120)</code></td>
+ <td><code>0x78 (120)</code></td>
+ <td><code>0x78 (120)</code></td>
+ <td><code>0x78 (120)</code></td>
+ <td><code>0x78 (120)</code></td>
+ <td><code>0x78 (120)</code></td>
+ <td><code>0x78 (120)</code></td>
+ <td><code>0x78 (120)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F10"</code></th>
+ <td><code>0x79 (121)</code></td>
+ <td><code>0x79 (121)</code></td>
+ <td><code>0x79 (121)</code></td>
+ <td><code>0x79 (121)</code></td>
+ <td><code>0x79 (121)</code></td>
+ <td><code>0x79 (121)</code></td>
+ <td><code>0x79 (121)</code></td>
+ <td><code>0x79 (121)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F11"</code></th>
+ <td><code>0x7A (122)</code></td>
+ <td><code>0x7A (122)</code></td>
+ <td><code>0x7A (122)</code></td>
+ <td><code>0x7A (122)</code></td>
+ <td><code>0x7A (122)</code></td>
+ <td><code>0x7A (122)</code></td>
+ <td><code>0x7A (122)</code></td>
+ <td><code>0x7A (122)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F12"</code></th>
+ <td><code>0x7B (123)</code></td>
+ <td><code>0x7B (123)</code></td>
+ <td><code>0x7B (123)</code></td>
+ <td><code>0x7B (123)</code></td>
+ <td><code>0x7B (123)</code></td>
+ <td><code>0x7B (123)</code></td>
+ <td><code>0x7B (123)</code></td>
+ <td><code>0x7B (123)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F13"</code></th>
+ <td><code>0x7C (124)</code></td>
+ <td><code>0x7C (124)</code></td>
+ <td><code>0x7C (124)</code></td>
+ <td><code>0x7C (124)</code> *1</td>
+ <td><code>0x7C (124)</code></td>
+ <td><code>0x7C (124)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x2C (44)</code> *2</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *3</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F14"</code></th>
+ <td><code>0x7D (125)</code></td>
+ <td><code>0x7D (125)</code></td>
+ <td><code>0x7D (125)</code></td>
+ <td><code>0x7D (125)</code> *1</td>
+ <td><code>0x7D (125)</code></td>
+ <td><code>0x7D (125)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x91 (145)</code> *2</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *3</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F15"</code></th>
+ <td><code>0x7E (126)</code></td>
+ <td><code>0x7E (126)</code></td>
+ <td><code>0x7E (126)</code></td>
+ <td><code>0x7E (126)</code> *1</td>
+ <td><code>0x7E (126)</code></td>
+ <td><code>0x7E (126)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x13 (19)</code> *2</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *3</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F16"</code></th>
+ <td><code>0x7F (127)</code></td>
+ <td><code>0x7F (127)</code></td>
+ <td><code>0x7F (127)</code></td>
+ <td><code>0x7F (127)</code> *1</td>
+ <td><code>0x7F (127)</code></td>
+ <td><code>0x7F (127)</code></td>
+ <td><code>0x7F (127)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *3</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F17"</code></th>
+ <td><code>0x80 (128)</code></td>
+ <td><code>0x80 (128)</code></td>
+ <td><code>0x80 (128)</code></td>
+ <td><code>0x80 (128)</code> *1</td>
+ <td><code>0x80 (128)</code></td>
+ <td><code>0x80 (128)</code></td>
+ <td><code>0x80 (128)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *3</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F18"</code></th>
+ <td><code>0x81 (129)</code></td>
+ <td><code>0x81 (129)</code></td>
+ <td><code>0x81 (129)</code></td>
+ <td><code>0x81 (129)</code> *1</td>
+ <td><code>0x81 (129)</code></td>
+ <td><code>0x81 (129)</code></td>
+ <td><code>0x81 (129)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *3</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F19"</code></th>
+ <td><code>0x82 (130)</code></td>
+ <td><code>0x82 (130)</code></td>
+ <td><code>0x82 (130)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *4</td>
+ <td><code>0x82 (130)</code></td>
+ <td><code>0x82 (130)</code></td>
+ <td><code>0x82 (130)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *3</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F20"</code></th>
+ <td><code>0x83 (131)</code></td>
+ <td><code>0x83 (131)</code></td>
+ <td><code>0x83 (131)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *4</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xE5 (229)</code> *5</td>
+ <td><code>0x83 (131)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *6</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F21"</code></th>
+ <td><code>0x84 (132)</code></td>
+ <td><code>0x84 (132)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *7</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *4</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *7</td>
+ <td><code>0x84 (132)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *8</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *6</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F22"</code></th>
+ <td><code>0x85 (133)</code></td>
+ <td><code>0x85 (133)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *7</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *4</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *7</td>
+ <td><code>0x85 (133)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *8</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *6</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F23"</code></th>
+ <td><code>0x86 (134)</code></td>
+ <td><code>0x86 (134)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *7</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *4</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *7</td>
+ <td><code>0x86 (134)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *8</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *6</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"F24"</code></th>
+ <td><code>0x87 (135)</code></td>
+ <td><code>0x87 (135)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *7</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *4</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *7</td>
+ <td><code>0x87 (135)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>N/A</code> *8</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x00 (0)</code> *3</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>*1在Fedora 20上测试。<br>
+ *2 PC的“<code>PrintScreen</code>”、“<code>ScrollLock</code>”和“<code>Pause</code>”映射到Mac的“F13”、“F14”和“F15”。火狐映射到和PC相同的<code>keyCode</code>。<br>
+ *3在Fedora 20上测试。这些键不会导致<code>GDK_Fxx</code> 按键符号。如果键产生正确的按键符号,这些值必须与IE相同。<br>
+ *4在Fedora 20上测试。这些键不会在chromium上引起dom键事件。<br>
+ *5 keyup事件的keycode值为0x83(131)。<br>
+ *6在Fedora 20上测试。这些密钥不会在Firefox上引起DOM密钥事件。<br>
+ *7仅激发keydown事件。<br>
+ *8在Firefox上不会触发任何DOM密钥事件。</p>
+
+<h3 id="小键盘键">小键盘键</h3>
+
+<p>由numPad中的键在numLock状态下导致的每个浏览器的keyDown事件的keycode值</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th colspan="1" rowspan="2" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th scope="col">Internet Explorer 11</th>
+ <th colspan="2" rowspan="1" scope="col">Google Chrome 34</th>
+ <th scope="col">Chromium 34</th>
+ <th scope="col">Safari 7</th>
+ <th colspan="3" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ <tr>
+ <th scope="col">Windows</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <th colspan="1" rowspan="2" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Mac (10.9)</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ <tr>
+ <th scope="col">Internet Explorer 11</th>
+ <th colspan="2" rowspan="1" scope="col">Google Chrome 34</th>
+ <th scope="col">Chromium 34</th>
+ <th scope="col">Safari 7</th>
+ <th colspan="3" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ </tfoot>
+ <tbody>
+ <tr>
+ <th scope="row"><code>"NumLock"</code></th>
+ <td><code>0x90 (144)</code></td>
+ <td><code>0x90 (144)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x0C (12)</code> *1</td>
+ <td><code>0x90 (144)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x0C (12)</code> *1</td>
+ <td><code>0x90 (144)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x0C (12)</code> *1</td>
+ <td><code>0x90 (144)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad0"</code></th>
+ <td><code>0x60 (96)</code></td>
+ <td><code>0x60 (96)</code></td>
+ <td><code>0x60 (96)</code></td>
+ <td><code>0x60 (96)</code></td>
+ <td><code>0x60 (96)</code></td>
+ <td><code>0x60 (96)</code></td>
+ <td><code>0x60 (96)</code></td>
+ <td><code>0x60 (96)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad1"</code></th>
+ <td><code>0x61 (97)</code></td>
+ <td><code>0x61 (97)</code></td>
+ <td><code>0x61 (97)</code></td>
+ <td><code>0x61 (97)</code></td>
+ <td><code>0x61 (97)</code></td>
+ <td><code>0x61 (97)</code></td>
+ <td><code>0x61 (97)</code></td>
+ <td><code>0x61 (97)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad2"</code></th>
+ <td><code>0x62 (98)</code></td>
+ <td><code>0x62 (98)</code></td>
+ <td><code>0x62 (98)</code></td>
+ <td><code>0x62 (98)</code></td>
+ <td><code>0x62 (98)</code></td>
+ <td><code>0x62 (98)</code></td>
+ <td><code>0x62 (98)</code></td>
+ <td><code>0x62 (98)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad3"</code></th>
+ <td><code>0x63 (99)</code></td>
+ <td><code>0x63 (99)</code></td>
+ <td><code>0x63 (99)</code></td>
+ <td><code>0x63 (99)</code></td>
+ <td><code>0x63 (99)</code></td>
+ <td><code>0x63 (99)</code></td>
+ <td><code>0x63 (99)</code></td>
+ <td><code>0x63 (99)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad4"</code></th>
+ <td><code>0x64 (100)</code></td>
+ <td><code>0x64 (100)</code></td>
+ <td><code>0x64 (100)</code></td>
+ <td><code>0x64 (100)</code></td>
+ <td><code>0x64 (100)</code></td>
+ <td><code>0x64 (100)</code></td>
+ <td><code>0x64 (100)</code></td>
+ <td><code>0x64 (100)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad5"</code></th>
+ <td><code>0x65 (101)</code></td>
+ <td><code>0x65 (101)</code></td>
+ <td><code>0x65 (101)</code></td>
+ <td><code>0x65 (101)</code></td>
+ <td><code>0x65 (101)</code></td>
+ <td><code>0x65 (101)</code></td>
+ <td><code>0x65 (101)</code></td>
+ <td><code>0x65 (101)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad6"</code></th>
+ <td><code>0x66 (102)</code></td>
+ <td><code>0x66 (102)</code></td>
+ <td><code>0x66 (102)</code></td>
+ <td><code>0x66 (102)</code></td>
+ <td><code>0x66 (102)</code></td>
+ <td><code>0x66 (102)</code></td>
+ <td><code>0x66 (102)</code></td>
+ <td><code>0x66 (102)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad7"</code></th>
+ <td><code>0x67 (103)</code></td>
+ <td><code>0x67 (103)</code></td>
+ <td><code>0x67 (103)</code></td>
+ <td><code>0x67 (103)</code></td>
+ <td><code>0x67 (103)</code></td>
+ <td><code>0x67 (103)</code></td>
+ <td><code>0x67 (103)</code></td>
+ <td><code>0x67 (103)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad8"</code></th>
+ <td><code>0x68 (104)</code></td>
+ <td><code>0x68 (104)</code></td>
+ <td><code>0x68 (104)</code></td>
+ <td><code>0x68 (104)</code></td>
+ <td><code>0x68 (104)</code></td>
+ <td><code>0x68 (104)</code></td>
+ <td><code>0x68 (104)</code></td>
+ <td><code>0x68 (104)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad9"</code></th>
+ <td><code>0x69 (105)</code></td>
+ <td><code>0x69 (105)</code></td>
+ <td><code>0x69 (105)</code></td>
+ <td><code>0x69 (105)</code></td>
+ <td><code>0x69 (105)</code></td>
+ <td><code>0x69 (105)</code></td>
+ <td><code>0x69 (105)</code></td>
+ <td><code>0x69 (105)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"NumpadAdd"</code></th>
+ <td><code>0x6B (107)</code></td>
+ <td><code>0x6B (107)</code></td>
+ <td><code>0x6B (107)</code></td>
+ <td><code>0x6B (107)</code></td>
+ <td><code>0x6B (107)</code></td>
+ <td><code>0x6B (107)</code></td>
+ <td><code>0x6B (107)</code></td>
+ <td><code>0x6B (107)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"NumpadComma"</code> inputting <code>","</code></th>
+ <td><code>0xC2 (194)</code></td>
+ <td><code>0xC2 (194)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBC (188)</code></td>
+ <td style="background-color: rgb(153, 153, 153);"><code>Always inputs </code>"."</td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBC (188)</code></td>
+ <td><code>0xC2 (194)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x6C (108)</code></td>
+ <td style="background-color: rgb(153, 153, 153);"><code>Always inputs </code>"."</td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"NumpadComma"</code> inputting <code>"."</code> or empty string</th>
+ <td><code>0xC2 (194)</code></td>
+ <td><code>0xC2 (194)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBE (190)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x6E (110)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBE (190)</code></td>
+ <td><code>0xC2 (194)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x6C (108)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x6E (110)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"NumpadDecimal"</code> inputting <code>"."</code></th>
+ <td><code>0x6E (110)</code></td>
+ <td><code>0x6E (110)</code></td>
+ <td><code>0x6E (110)</code></td>
+ <td><code>0x6E (110)</code></td>
+ <td><code>0x6E (110)</code></td>
+ <td><code>0x6E (110)</code></td>
+ <td><code>0x6E (110)</code></td>
+ <td><code>0x6E (110)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"NumpadDecimal"</code> inputting <code>","</code></th>
+ <td><code>0x6E (110)</code></td>
+ <td><code>0x6E (110)</code></td>
+ <td><code>0x6E (110)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x6C (108)</code></td>
+ <td><code>0x6E (110)</code></td>
+ <td><code>0x6E (110)</code></td>
+ <td><code>0x6E (110)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x6C (108)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"NumpadDivide"</code></th>
+ <td><code>0x6F (111)</code></td>
+ <td><code>0x6F (111)</code></td>
+ <td><code>0x6F (111)</code></td>
+ <td><code>0x6F (111)</code></td>
+ <td><code>0x6F (111)</code></td>
+ <td><code>0x6F (111)</code></td>
+ <td><code>0x6F (111)</code></td>
+ <td><code>0x6F (111)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"NumpadEnter"</code></th>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ <td><code>0x0D (13)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"NumpadEqual"</code></th>
+ <td><code>0x0C (12)</code></td>
+ <td><code>0x0C (12)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBB (187)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBB (187)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0xBB (187)</code></td>
+ <td><code>0x0C (12)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x3D (61)</code></td>
+ <td style="background-color: rgb(255, 255, 204);"><code>0x3D (61)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"NumpadMultiply"</code></th>
+ <td><code>0x6A (106)</code></td>
+ <td><code>0x6A (106)</code></td>
+ <td><code>0x6A (106)</code></td>
+ <td><code>0x6A (106)</code></td>
+ <td><code>0x6A (106)</code></td>
+ <td><code>0x6A (106)</code></td>
+ <td><code>0x6A (106)</code></td>
+ <td><code>0x6A (106)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"NumpadSubtract"</code></th>
+ <td><code>0x6D (109)</code></td>
+ <td><code>0x6D (109)</code></td>
+ <td><code>0x6D (109)</code></td>
+ <td><code>0x6D (109)</code></td>
+ <td><code>0x6D (109)</code></td>
+ <td><code>0x6D (109)</code></td>
+ <td><code>0x6D (109)</code></td>
+ <td><code>0x6D (109)</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>*1“numlock”键在Mac上作为“clear”键工作。</p>
+
+<p>由处于无numlock状态的numpad中的键引起的每个浏览器的keydown事件的keycode值</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th colspan="1" rowspan="2" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th scope="col">Internet Explorer 11</th>
+ <th colspan="1" rowspan="1" scope="col">Google Chrome 34</th>
+ <th scope="col">Chromium 34</th>
+ <th colspan="2" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ <tr>
+ <th scope="col">Windows</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <th colspan="1" rowspan="2" scope="row">{{domxref("KeyboardEvent.code")}}</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ <th scope="col">Windows</th>
+ <th scope="col">Linux (Ubuntu 14.04)</th>
+ </tr>
+ <tr>
+ <th scope="col">Internet Explorer 11</th>
+ <th colspan="1" rowspan="1" scope="col">Google Chrome 34</th>
+ <th scope="col">Chromium 34</th>
+ <th colspan="2" rowspan="1" scope="col">Gecko 29</th>
+ </tr>
+ </tfoot>
+ <tbody>
+ <tr>
+ <th scope="row"><code>"Numpad0"</code> (<code>"Insert"</code>)</th>
+ <td><code>0x2D (45)</code></td>
+ <td><code>0x2D (45)</code></td>
+ <td><code>0x2D (45)</code></td>
+ <td><code>0x2D (45)</code></td>
+ <td><code>0x2D (45)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad1"</code> (<code>"End"</code>)</th>
+ <td><code>0x23 (35)</code></td>
+ <td><code>0x23 (35)</code></td>
+ <td><code>0x23 (35)</code></td>
+ <td><code>0x23 (35)</code></td>
+ <td><code>0x23 (35)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad2"</code> (<code>"ArrowDown"</code>)</th>
+ <td><code>0x28 (40)</code></td>
+ <td><code>0x28 (40)</code></td>
+ <td><code>0x28 (40)</code></td>
+ <td><code>0x28 (40)</code></td>
+ <td><code>0x28 (40)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad3"</code> (<code>"PageDown"</code>)</th>
+ <td><code>0x22 (34)</code></td>
+ <td><code>0x22 (34)</code></td>
+ <td><code>0x22 (34)</code></td>
+ <td><code>0x22 (34)</code></td>
+ <td><code>0x22 (34)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad4"</code> (<code>"ArrowLeft"</code>)</th>
+ <td><code>0x25 (37)</code></td>
+ <td><code>0x25 (37)</code></td>
+ <td><code>0x25 (37)</code></td>
+ <td><code>0x25 (37)</code></td>
+ <td><code>0x25 (37)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad5"</code></th>
+ <td><code>0x0C (12)</code></td>
+ <td><code>0x0C (12)</code></td>
+ <td><code>0x0C (12)</code></td>
+ <td><code>0x0C (12)</code></td>
+ <td><code>0x0C (12)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad6"</code> (<code>"ArrowRight"</code>)</th>
+ <td><code>0x27 (39)</code></td>
+ <td><code>0x27 (39)</code></td>
+ <td><code>0x27 (39)</code></td>
+ <td><code>0x27 (39)</code></td>
+ <td><code>0x27 (39)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad7"</code> (<code>"Home"</code>)</th>
+ <td><code>0x24 (36)</code></td>
+ <td><code>0x24 (36)</code></td>
+ <td><code>0x24 (36)</code></td>
+ <td><code>0x24 (36)</code></td>
+ <td><code>0x24 (36)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad8"</code> (<code>"ArrowUp"</code>)</th>
+ <td><code>0x26 (38)</code></td>
+ <td><code>0x26 (38)</code></td>
+ <td><code>0x26 (38)</code></td>
+ <td><code>0x26 (38)</code></td>
+ <td><code>0x26 (38)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"Numpad9"</code> (<code>"PageUp"</code>)</th>
+ <td><code>0x21 (33)</code></td>
+ <td><code>0x21 (33)</code></td>
+ <td><code>0x21 (33)</code></td>
+ <td><code>0x21 (33)</code></td>
+ <td><code>0x21 (33)</code></td>
+ </tr>
+ <tr>
+ <th scope="row"><code>"NumpadDecimal"</code> (<code>"Delete"</code>)</th>
+ <td><code>0x2E (46)</code></td>
+ <td><code>0x2E (46)</code></td>
+ <td><code>0x2E (46)</code></td>
+ <td><code>0x2E (46)</code></td>
+ <td><code>0x2E (46)</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>*最近的Mac没有“numlock”键和状态。因此,未锁定状态不可用。</p>
+
+<h2 id="常数值的键码">常数值的键码</h2>
+
+<p>gecko在keyboardvent中定义了许多keycode值,用于显式地生成映射表。这些值对Firefox的附加开发人员很有用,但在公共网页中却没有那么有用。</p>
+
+<table class="standard-table" style="width: auto;">
+ <tbody>
+ <tr>
+ <td class="header">常数</td>
+ <td class="header">值</td>
+ <td class="header">描述</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_CANCEL</code></td>
+ <td style="white-space: nowrap;">0x03 (3)</td>
+ <td>Cancel key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_HELP</code></td>
+ <td style="white-space: nowrap;">0x06 (6)</td>
+ <td>Help key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_BACK_SPACE</code></td>
+ <td style="white-space: nowrap;">0x08 (8)</td>
+ <td>Backspace key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_TAB</code></td>
+ <td style="white-space: nowrap;">0x09 (9)</td>
+ <td>Tab key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_CLEAR</code></td>
+ <td style="white-space: nowrap;">0x0C (12)</td>
+ <td>"5" key on Numpad when NumLock is unlocked. Or on Mac, clear key which is positioned at NumLock key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_RETURN</code></td>
+ <td style="white-space: nowrap;">0x0D (13)</td>
+ <td>Return/enter key on the main keyboard.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_ENTER</code></td>
+ <td style="white-space: nowrap;">0x0E (14)</td>
+ <td>Reserved, but not used. <code> </code><code>{{obsolete_inline(30)}} </code>(Dropped, see {{bug(969247)}}.)</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_SHIFT</code></td>
+ <td style="white-space: nowrap;">0x10 (16)</td>
+ <td>Shift key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_CONTROL</code></td>
+ <td style="white-space: nowrap;">0x11 (17)</td>
+ <td>Control key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_ALT</code></td>
+ <td style="white-space: nowrap;">0x12 (18)</td>
+ <td>Alt (Option on Mac) key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_PAUSE</code></td>
+ <td style="white-space: nowrap;">0x13 (19)</td>
+ <td>Pause key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_CAPS_LOCK</code></td>
+ <td style="white-space: nowrap;">0x14 (20)</td>
+ <td>Caps lock.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_KANA</code></td>
+ <td style="white-space: nowrap;">0x15 (21)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_HANGUL</code></td>
+ <td style="white-space: nowrap;">0x15 (21)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_EISU</code></td>
+ <td style="white-space: nowrap;">0x 16 (22)</td>
+ <td>"英数" key on Japanese Mac keyboard. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_JUNJA</code></td>
+ <td style="white-space: nowrap;">0x17 (23)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_FINAL</code></td>
+ <td style="white-space: nowrap;">0x18 (24)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_HANJA</code></td>
+ <td style="white-space: nowrap;">0x19 (25)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_KANJI</code></td>
+ <td style="white-space: nowrap;">0x19 (25)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_ESCAPE</code></td>
+ <td style="white-space: nowrap;">0x1B (27)</td>
+ <td>Escape key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_CONVERT</code></td>
+ <td style="white-space: nowrap;">0x1C (28)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_NONCONVERT</code></td>
+ <td style="white-space: nowrap;">0x1D (29)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_ACCEPT</code></td>
+ <td style="white-space: nowrap;">0x1E (30)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_MODECHANGE</code></td>
+ <td style="white-space: nowrap;">0x1F (31)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_SPACE</code></td>
+ <td style="white-space: nowrap;">0x20 (32)</td>
+ <td>Space bar.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_PAGE_UP</code></td>
+ <td style="white-space: nowrap;">0x21 (33)</td>
+ <td>Page Up key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_PAGE_DOWN</code></td>
+ <td style="white-space: nowrap;">0x22 (34)</td>
+ <td>Page Down key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_END</code></td>
+ <td style="white-space: nowrap;">0x23 (35)</td>
+ <td>End key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_HOME</code></td>
+ <td style="white-space: nowrap;">0x24 (36)</td>
+ <td>Home key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_LEFT</code></td>
+ <td style="white-space: nowrap;">0x25 (37)</td>
+ <td>Left arrow.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_UP</code></td>
+ <td style="white-space: nowrap;">0x26 (38)</td>
+ <td>Up arrow.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_RIGHT</code></td>
+ <td style="white-space: nowrap;">0x27 (39)</td>
+ <td>Right arrow.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_DOWN</code></td>
+ <td style="white-space: nowrap;">0x28 (40)</td>
+ <td>Down arrow.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_SELECT</code></td>
+ <td style="white-space: nowrap;">0x29 (41)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_PRINT</code></td>
+ <td style="white-space: nowrap;">0x2A (42)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_EXECUTE</code></td>
+ <td style="white-space: nowrap;">0x2B (43)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_PRINTSCREEN</code></td>
+ <td style="white-space: nowrap;">0x2C (44)</td>
+ <td>Print Screen key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_INSERT</code></td>
+ <td style="white-space: nowrap;">0x2D (45)</td>
+ <td>Ins(ert) key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_DELETE</code></td>
+ <td style="white-space: nowrap;">0x2E (46)</td>
+ <td>Del(ete) key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_0</code></td>
+ <td style="white-space: nowrap;">0x30 (48)</td>
+ <td>"0" key in standard key location.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_1</code></td>
+ <td style="white-space: nowrap;">0x31 (49)</td>
+ <td>"1" key in standard key location.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_2</code></td>
+ <td style="white-space: nowrap;">0x32 (50)</td>
+ <td>"2" key in standard key location.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_3</code></td>
+ <td style="white-space: nowrap;">0x33 (51)</td>
+ <td>"3" key in standard key location.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_4</code></td>
+ <td style="white-space: nowrap;">0x34 (52)</td>
+ <td>"4" key in standard key location.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_5</code></td>
+ <td style="white-space: nowrap;">0x35 (53)</td>
+ <td>"5" key in standard key location.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_6</code></td>
+ <td style="white-space: nowrap;">0x36 (54)</td>
+ <td>"6" key in standard key location.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_7</code></td>
+ <td style="white-space: nowrap;">0x37 (55)</td>
+ <td>"7" key in standard key location.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_8</code></td>
+ <td style="white-space: nowrap;">0x38 (56)</td>
+ <td>"8" key in standard key location.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_9</code></td>
+ <td style="white-space: nowrap;">0x39 (57)</td>
+ <td>"9" key in standard key location.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_COLON</code></td>
+ <td style="white-space: nowrap;">0x3A (58)</td>
+ <td>Colon (":") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_SEMICOLON</code></td>
+ <td style="white-space: nowrap;">0x3B (59)</td>
+ <td>Semicolon (";") key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_LESS_THAN</code></td>
+ <td style="white-space: nowrap;">0x3C (60)</td>
+ <td>Less-than ("&lt;") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_EQUALS</code></td>
+ <td style="white-space: nowrap;">0x3D (61)</td>
+ <td>Equals ("=") key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_GREATER_THAN</code></td>
+ <td style="white-space: nowrap;">0x3E (62)</td>
+ <td>Greater-than ("&gt;") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_QUESTION_MARK</code></td>
+ <td style="white-space: nowrap;">0x3F (63)</td>
+ <td>Question mark ("?") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_AT</code></td>
+ <td style="white-space: nowrap;">0x40 (64)</td>
+ <td>Atmark ("@") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_A</code></td>
+ <td style="white-space: nowrap;">0x41 (65)</td>
+ <td>"A" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_B</code></td>
+ <td style="white-space: nowrap;">0x42 (66)</td>
+ <td>"B" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_C</code></td>
+ <td style="white-space: nowrap;">0x43 (67)</td>
+ <td>"C" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_D</code></td>
+ <td style="white-space: nowrap;">0x44 (68)</td>
+ <td>"D" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_E</code></td>
+ <td style="white-space: nowrap;">0x45 (69)</td>
+ <td>"E" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F</code></td>
+ <td style="white-space: nowrap;">0x46 (70)</td>
+ <td>"F" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_G</code></td>
+ <td style="white-space: nowrap;">0x47 (71)</td>
+ <td>"G" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_H</code></td>
+ <td style="white-space: nowrap;">0x48 (72)</td>
+ <td>"H" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_I</code></td>
+ <td style="white-space: nowrap;">0x49 (73)</td>
+ <td>"I" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_J</code></td>
+ <td style="white-space: nowrap;">0x4A (74)</td>
+ <td>"J" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_K</code></td>
+ <td style="white-space: nowrap;">0x4B (75)</td>
+ <td>"K" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_L</code></td>
+ <td style="white-space: nowrap;">0x4C (76)</td>
+ <td>"L" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_M</code></td>
+ <td style="white-space: nowrap;">0x4D (77)</td>
+ <td>"M" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_N</code></td>
+ <td style="white-space: nowrap;">0x4E (78)</td>
+ <td>"N" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_O</code></td>
+ <td style="white-space: nowrap;">0x4F (79)</td>
+ <td>"O" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_P</code></td>
+ <td style="white-space: nowrap;">0x50 (80)</td>
+ <td>"P" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_Q</code></td>
+ <td style="white-space: nowrap;">0x51 (81)</td>
+ <td>"Q" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_R</code></td>
+ <td style="white-space: nowrap;">0x52 (82)</td>
+ <td>"R" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_S</code></td>
+ <td style="white-space: nowrap;">0x53 (83)</td>
+ <td>"S" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_T</code></td>
+ <td style="white-space: nowrap;">0x54 (84)</td>
+ <td>"T" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_U</code></td>
+ <td style="white-space: nowrap;">0x55 (85)</td>
+ <td>"U" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_V</code></td>
+ <td style="white-space: nowrap;">0x56 (86)</td>
+ <td>"V" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_W</code></td>
+ <td style="white-space: nowrap;">0x57 (87)</td>
+ <td>"W" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_X</code></td>
+ <td style="white-space: nowrap;">0x58 (88)</td>
+ <td>"X" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_Y</code></td>
+ <td style="white-space: nowrap;">0x59 (89)</td>
+ <td>"Y" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_Z</code></td>
+ <td style="white-space: nowrap;">0x5A (90)</td>
+ <td>"Z" key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN</code></td>
+ <td style="white-space: nowrap;">0x5B (91)</td>
+ <td>Windows logo key on Windows. Or Super or Hyper key on Linux. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_CONTEXT_MENU</code></td>
+ <td style="white-space: nowrap;">0x5D (93)</td>
+ <td>Opening context menu key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_SLEEP</code></td>
+ <td style="white-space: nowrap;">0x5F (95)</td>
+ <td>Linux support for this keycode was added in Gecko 4.0.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_NUMPAD0</code></td>
+ <td style="white-space: nowrap;">0x60 (96)</td>
+ <td>"0" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_NUMPAD1</code></td>
+ <td style="white-space: nowrap;">0x61 (97)</td>
+ <td>"1" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_NUMPAD2</code></td>
+ <td style="white-space: nowrap;">0x62 (98)</td>
+ <td>"2" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_NUMPAD3</code></td>
+ <td style="white-space: nowrap;">0x63 (99)</td>
+ <td>"3" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_NUMPAD4</code></td>
+ <td style="white-space: nowrap;">0x64 (100)</td>
+ <td>"4" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_NUMPAD5</code></td>
+ <td style="white-space: nowrap;">0x65 (101)</td>
+ <td>"5" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_NUMPAD6</code></td>
+ <td style="white-space: nowrap;">0x66 (102)</td>
+ <td>"6" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_NUMPAD7</code></td>
+ <td style="white-space: nowrap;">0x67 (103)</td>
+ <td>"7" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_NUMPAD8</code></td>
+ <td style="white-space: nowrap;">0x68 (104)</td>
+ <td>"8" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_NUMPAD9</code></td>
+ <td style="white-space: nowrap;">0x69 (105)</td>
+ <td>"9" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_MULTIPLY</code></td>
+ <td style="white-space: nowrap;">0x6A (106)</td>
+ <td>"*" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_ADD</code></td>
+ <td style="white-space: nowrap;">0x6B (107)</td>
+ <td>"+" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_SEPARATOR</code></td>
+ <td style="white-space: nowrap;">0x6C (108)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_SUBTRACT</code></td>
+ <td style="white-space: nowrap;">0x6D (109)</td>
+ <td>"-" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_DECIMAL</code></td>
+ <td style="white-space: nowrap;">0x6E (110)</td>
+ <td>Decimal point on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_DIVIDE</code></td>
+ <td style="white-space: nowrap;">0x6F (111)</td>
+ <td>"/" on the numeric keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F1</code></td>
+ <td style="white-space: nowrap;">0x70 (112)</td>
+ <td>F1 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F2</code></td>
+ <td style="white-space: nowrap;">0x71 (113)</td>
+ <td>F2 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F3</code></td>
+ <td style="white-space: nowrap;">0x72 (114)</td>
+ <td>F3 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F4</code></td>
+ <td style="white-space: nowrap;">0x73 (115)</td>
+ <td>F4 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F5</code></td>
+ <td style="white-space: nowrap;">0x74 (116)</td>
+ <td>F5 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F6</code></td>
+ <td style="white-space: nowrap;">0x75 (117)</td>
+ <td>F6 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F7</code></td>
+ <td style="white-space: nowrap;">0x76 (118)</td>
+ <td>F7 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F8</code></td>
+ <td style="white-space: nowrap;">0x77 (119)</td>
+ <td>F8 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F9</code></td>
+ <td style="white-space: nowrap;">0x78 (120)</td>
+ <td>F9 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F10</code></td>
+ <td style="white-space: nowrap;">0x79 (121)</td>
+ <td>F10 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F11</code></td>
+ <td style="white-space: nowrap;">0x7A (122)</td>
+ <td>F11 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F12</code></td>
+ <td style="white-space: nowrap;">0x7B (123)</td>
+ <td>F12 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F13</code></td>
+ <td style="white-space: nowrap;">0x7C (124)</td>
+ <td>F13 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F14</code></td>
+ <td style="white-space: nowrap;">0x7D (125)</td>
+ <td>F14 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F15</code></td>
+ <td style="white-space: nowrap;">0x7E (126)</td>
+ <td>F15 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F16</code></td>
+ <td style="white-space: nowrap;">0x7F (127)</td>
+ <td>F16 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F17</code></td>
+ <td style="white-space: nowrap;">0x80 (128)</td>
+ <td>F17 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F18</code></td>
+ <td style="white-space: nowrap;">0x81 (129)</td>
+ <td>F18 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F19</code></td>
+ <td style="white-space: nowrap;">0x82 (130)</td>
+ <td>F19 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F20</code></td>
+ <td style="white-space: nowrap;">0x83 (131)</td>
+ <td>F20 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F21</code></td>
+ <td style="white-space: nowrap;">0x84 (132)</td>
+ <td>F21 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F22</code></td>
+ <td style="white-space: nowrap;">0x85 (133)</td>
+ <td>F22 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F23</code></td>
+ <td style="white-space: nowrap;">0x86 (134)</td>
+ <td>F23 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_F24</code></td>
+ <td style="white-space: nowrap;">0x87 (135)</td>
+ <td>F24 key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_NUM_LOCK</code></td>
+ <td style="white-space: nowrap;">0x90 (144)</td>
+ <td>Num Lock key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_SCROLL_LOCK</code></td>
+ <td style="white-space: nowrap;">0x91 (145)</td>
+ <td>Scroll Lock key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_FJ_JISHO</code></td>
+ <td style="white-space: nowrap;">0x92 (146)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for "Dictionary" key on Fujitsu OASYS. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_FJ_MASSHOU</code></td>
+ <td style="white-space: nowrap;">0x93 (147)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for "Unregister word" key on Fujitsu OASYS. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_FJ_TOUROKU</code></td>
+ <td style="white-space: nowrap;">0x94 (148)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for "Register word" key on Fujitsu OASYS. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_FJ_LOYA</code></td>
+ <td style="white-space: nowrap;">0x95 (149)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for "Left OYAYUBI" key on Fujitsu OASYS. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_FJ_ROYA</code></td>
+ <td style="white-space: nowrap;">0x96 (150)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for "Right OYAYUBI" key on Fujitsu OASYS. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_CIRCUMFLEX</code></td>
+ <td style="white-space: nowrap;">0xA0 (160)</td>
+ <td>Circumflex ("^") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_EXCLAMATION</code></td>
+ <td style="white-space: nowrap;">0xA1 (161)</td>
+ <td>Exclamation ("!") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_DOUBLE_QUOTE</code></td>
+ <td style="white-space: nowrap;">0xA3 (162)</td>
+ <td>Double quote (""") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_HASH</code></td>
+ <td style="white-space: nowrap;">0xA3 (163)</td>
+ <td>Hash ("#") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_DOLLAR</code></td>
+ <td style="white-space: nowrap;">0xA4 (164)</td>
+ <td>Dollar sign ("$") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_PERCENT</code></td>
+ <td style="white-space: nowrap;">0xA5 (165)</td>
+ <td>Percent ("%") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_AMPERSAND</code></td>
+ <td style="white-space: nowrap;">0xA6 (166)</td>
+ <td>Ampersand ("&amp;") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_UNDERSCORE</code></td>
+ <td style="white-space: nowrap;">0xA7 (167)</td>
+ <td>Underscore ("_") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_OPEN_PAREN</code></td>
+ <td style="white-space: nowrap;">0xA8 (168)</td>
+ <td>Open parenthesis ("(") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_CLOSE_PAREN</code></td>
+ <td style="white-space: nowrap;">0xA9 (169)</td>
+ <td>Close parenthesis (")") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_ASTERISK</code></td>
+ <td style="white-space: nowrap;">0xAA (170)</td>
+ <td>Asterisk ("*") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_PLUS</code></td>
+ <td style="white-space: nowrap;">0xAB (171)</td>
+ <td>Plus ("+") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_PIPE</code></td>
+ <td style="white-space: nowrap;">0xAC (172)</td>
+ <td>Pipe ("|") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_HYPHEN_MINUS</code></td>
+ <td style="white-space: nowrap;">0xAD (173)</td>
+ <td>Hyphen-US/docs/Minus ("-") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_OPEN_CURLY_BRACKET</code></td>
+ <td style="white-space: nowrap;">0xAE (174)</td>
+ <td>Open curly bracket ("{") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_CLOSE_CURLY_BRACKET</code></td>
+ <td style="white-space: nowrap;">0xAF (175)</td>
+ <td>Close curly bracket ("}") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_TILDE</code></td>
+ <td style="white-space: nowrap;">0xB0 (176)</td>
+ <td>Tilde ("~") key. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_VOLUME_MUTE</code></td>
+ <td style="white-space: nowrap;">0xB5 (181)</td>
+ <td>Audio mute key. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_VOLUME_DOWN</code></td>
+ <td style="white-space: nowrap;">0xB6 (182)</td>
+ <td>Audio volume down key {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_VOLUME_UP</code></td>
+ <td style="white-space: nowrap;">0xB7 (183)</td>
+ <td>Audio volume up key {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_COMMA</code></td>
+ <td style="white-space: nowrap;">0xBC (188)</td>
+ <td>Comma (",") key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_PERIOD</code></td>
+ <td style="white-space: nowrap;">0xBE (190)</td>
+ <td>Period (".") key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_SLASH</code></td>
+ <td style="white-space: nowrap;">0xBF (191)</td>
+ <td>Slash ("/") key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_BACK_QUOTE</code></td>
+ <td style="white-space: nowrap;">0xC0 (192)</td>
+ <td>Back tick ("`") key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_OPEN_BRACKET</code></td>
+ <td style="white-space: nowrap;">0xDB (219)</td>
+ <td>Open square bracket ("[") key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_BACK_SLASH</code></td>
+ <td style="white-space: nowrap;">0xDC (220)</td>
+ <td>Back slash ("\") key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_CLOSE_BRACKET</code></td>
+ <td style="white-space: nowrap;">0xDD (221)</td>
+ <td>Close square bracket ("]") key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_QUOTE</code></td>
+ <td style="white-space: nowrap;">0xDE (222)</td>
+ <td>Quote (''') key.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_META</code></td>
+ <td style="white-space: nowrap;">0xE0 (224)</td>
+ <td>Meta key on Linux, Command key on Mac.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_ALTGR</code></td>
+ <td style="white-space: nowrap;">0xE1 (225)</td>
+ <td>AltGr key (Level 3 Shift key or Level 5 Shift key) on Linux. {{gecko_minversion_inline("15.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_ICO_HELP</code></td>
+ <td style="white-space: nowrap;">0xE3 (227)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This is (was?) used for Olivetti ICO keyboard.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_ICO_00</code></td>
+ <td style="white-space: nowrap;">0xE4 (228)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This is (was?) used for Olivetti ICO keyboard.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_ICO_CLEAR</code></td>
+ <td style="white-space: nowrap;">0xE6 (230)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This is (was?) used for Olivetti ICO keyboard.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_RESET</code></td>
+ <td style="white-space: nowrap;">0xE9 (233)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_JUMP</code></td>
+ <td style="white-space: nowrap;">0xEA (234)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_PA1</code></td>
+ <td style="white-space: nowrap;">0xEB (235)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_PA2</code></td>
+ <td style="white-space: nowrap;">0xEC (236)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_PA3</code></td>
+ <td style="white-space: nowrap;">0xED (237)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_WSCTRL</code></td>
+ <td style="white-space: nowrap;">0xEE (238)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_CUSEL</code></td>
+ <td style="white-space: nowrap;">0xEF (239)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_ATTN</code></td>
+ <td style="white-space: nowrap;">0xF0 (240)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_FINISH</code></td>
+ <td style="white-space: nowrap;">0xF1 (241)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_COPY</code></td>
+ <td style="white-space: nowrap;">0xF2 (242)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_AUTO</code></td>
+ <td style="white-space: nowrap;">0xF3 (243)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_ENLW</code></td>
+ <td style="white-space: nowrap;">0xF4 (244)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_BACKTAB</code></td>
+ <td style="white-space: nowrap;">0xF5 (245)</td>
+ <td>An <a href="#OEM_specific_keys_on_Windows" title="#OEM_specific_keys_on_Windows">OEM specific key on Windows</a>. This was used for Nokia/Ericsson's device.{{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_ATTN</code></td>
+ <td style="white-space: nowrap;">0xF6 (246)</td>
+ <td>Attn (Attention) key of IBM midrange computers, e.g., AS/400. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_CRSEL</code></td>
+ <td style="white-space: nowrap;">0xF7 (247)</td>
+ <td>CrSel (Cursor Selection) key of IBM 3270 keyboard layout. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_EXSEL</code></td>
+ <td style="white-space: nowrap;">0xF8 (248)</td>
+ <td>ExSel (Extend Selection) key of IBM 3270 keyboard layout. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_EREOF</code></td>
+ <td style="white-space: nowrap;">0xF9 (249)</td>
+ <td>Erase EOF key of IBM 3270 keyboard layout. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_PLAY</code></td>
+ <td style="white-space: nowrap;">0xFA (250)</td>
+ <td>Play key of IBM 3270 keyboard layout. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_ZOOM</code></td>
+ <td style="white-space: nowrap;">0xFB (251)</td>
+ <td>Zoom key. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_PA1</code></td>
+ <td style="white-space: nowrap;">0xFD (253)</td>
+ <td>PA1 key of IBM 3270 keyboard layout. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ <tr>
+ <td><code>DOM_VK_WIN_OEM_CLEAR</code></td>
+ <td style="white-space: nowrap;">0xFE (254)</td>
+ <td>Clear key, but we're not sure the meaning difference from <code>DOM_VK_CLEAR</code>. {{gecko_minversion_inline("21.0")}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Windows上的OEM特定密钥">Windows上的OEM特定密钥</h3>
+
+<p>在Windows上,虚拟密钥代码的某些值是为特定于OEM的密钥定义(保留)的。它们可用于非标准键盘上的特殊键。换句话说,一些值被两个或多个供应商(或硬件)用于不同的含义。</p>
+
+<p>从gecko 21(并且早于15)开始,仅在Windows上的keycode属性上提供OEM特定的键值。因此,它们对于通常的Web应用程序不有用。它们仅对内部网应用程序或类似情况有用。</p>
+
+<p>查看MSDN上的"<a href="http://msdn.microsoft.com/en-us/library/aa452679.aspx" title="http://msdn.microsoft.com/en-us/library/aa452679.aspx">Manufacturer-specific Virtual-Key Codes (Windows CE 5.0)</a>"了解更多</p>
+
+<div id="cke_pastebin" style="position: absolute; top: 1308.5px; width: 1px; height: 1px; overflow: hidden; left: -1000px;"></div>
diff --git a/files/zh-cn/web/api/keyboardevent/location/index.html b/files/zh-cn/web/api/keyboardevent/location/index.html
new file mode 100644
index 0000000000..753da8023a
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/location/index.html
@@ -0,0 +1,104 @@
+---
+title: KeyboardEvent.location
+slug: Web/API/KeyboardEvent/location
+translation_of: Web/API/KeyboardEvent/location
+---
+<div>{{APIRef("DOM Events")}}</div>
+
+<p><code><strong>KeyboardEvent.location</strong></code> 是一个只读属性,返回一个无符号的长整型 <code>unsigned long</code>,表示按键在键盘或其他设备上的位置</p>
+
+<p>可选值:</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">Constant</td>
+ <td class="header">Value</td>
+ <td class="header">Description</td>
+ </tr>
+ <tr>
+ <td><code>DOM_KEY_LOCATION_STANDARD</code></td>
+ <td>0</td>
+ <td>The key has only one version, or can't be distinguished between the left and right versions of the key, and was not pressed on the numeric keypad or a key that is considered to be part of the keypad.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_KEY_LOCATION_LEFT</code></td>
+ <td>1</td>
+ <td>The key was the left-hand version of the key; for example, the left-hand <kbd>Control</kbd> key was pressed on a standard 101 key US keyboard. This value is only used for keys that have more than one possible location on the keyboard.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_KEY_LOCATION_RIGHT</code></td>
+ <td>2</td>
+ <td>The key was the right-hand version of the key; for example, the right-hand <kbd>Control</kbd> key is pressed on a standard 101 key US keyboard. This value is only used for keys that have more than one possible location on the keyboard.</td>
+ </tr>
+ <tr>
+ <td><code>DOM_KEY_LOCATION_NUMPAD</code></td>
+ <td>3</td>
+ <td>
+ <p>The key was on the numeric keypad, or has a virtual key code that corresponds to the numeric keypad.</p>
+
+ <div class="note"><strong>Note:</strong> When <kbd>NumLock</kbd> is locked, Gecko always returns <code>DOM_KEY_LOCATION_NUMPAD</code> for the keys on the numeric pad. Otherwise, when <kbd>NumLock</kbd> is unlocked and the keyboard actually has a numeric keypad, Gecko always returns <code>DOM_KEY_LOCATION_NUMPAD</code> too. On the other hand, if the keyboard doesn't have a keypad, such as on a notebook computer, some keys become Numpad only when NumLock is locked. When such keys fires key events, the location attribute value depends on the key. That is, it must not be <code>DOM_KEY_LOCATION_NUMPAD</code>.</div>
+
+ <div class="note"><strong>Note:</strong> <kbd>NumLock</kbd> key's key events indicate <code>DOM_KEY_LOCATION_STANDARD</code> both on Gecko and Internet Explorer.</div>
+ </td>
+ </tr>
+ <tr>
+ <td><code>DOM_KEY_LOCATION_MOBILE</code> {{Non-standard_inline()}}{{obsolete_inline(38)}}</td>
+ <td>4</td>
+ <td>
+ <p>The key was on a mobile device; this can be on either a physical keypad or a virtual keyboard.</p>
+
+ <div class="note"><strong>Note: </strong>Gecko always returns <code>DOM_KEY_LOCATION_MOBILE</code> on Android (Prior to 18), Maemo, and <a href="/en-US/docs/Mozilla/Boot_to_Gecko" title="Boot to Gecko">Boot to Gecko</a>. However, at {{gecko("38")}}, this is dropped.</div>
+ </td>
+ </tr>
+ <tr>
+ <td><code>DOM_KEY_LOCATION_JOYSTICK</code> {{Non-standard_inline()}}{{obsolete_inline(38)}}</td>
+ <td>5</td>
+ <td>
+ <p>The key was a button on a game controller or a joystick on a mobile device.</p>
+
+ <div class="note"><strong>Note: </strong>Gecko never fires trusted key events with <code>DOM_KEY_LOCATION_JOYSTICK</code> except on Android. Starting 18, native key events on Android may have this value. {{gecko_minversion_inline("18.0")}} However, at {{gecko("38")}}, this is dropped.</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox">var <em>location</em> = <em>event</em>.location;</pre>
+
+<h2 id="Example">Example</h2>
+
+<pre class="brush: js">function keyEvent(event) {
+ console.log("Location of key pressed: " + event.location);
+}
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('DOM3 Events', '#widl-KeyboardEvent-location', 'KeyboardEvent.location')}}</td>
+ <td>{{Spec2('DOM3 Events')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("api.KeyboardEvent.location")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{domxref("KeyboardEvent")}}</li>
+</ul>
diff --git a/files/zh-cn/web/api/keyboardevent/metakey/index.html b/files/zh-cn/web/api/keyboardevent/metakey/index.html
new file mode 100644
index 0000000000..8548733aed
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/metakey/index.html
@@ -0,0 +1,66 @@
+---
+title: KeyboardEvent.metaKey
+slug: Web/API/KeyboardEvent/metaKey
+tags:
+ - API
+ - MouseEvent
+translation_of: Web/API/KeyboardEvent/metaKey
+---
+<p>{{APIRef("DOM Events")}}</p>
+
+<p><strong><code>KeyboardEvent.metaKey</code></strong> 为只读属性,返回一个 {{jsxref("Boolean", "布尔值")}},在事件发生时,用于指示 <kbd>Meta</kbd> 键是按下状态(<code style="font-style: normal;">true</code>),还是释放状态(<code style="font-style: normal;">false</code>)。</p>
+
+<div class="note">
+<p>备注:在MAC键盘上,表示 Command 键(<kbd>⌘</kbd>),在Windows键盘上,表示 Windows 键(<kbd>⊞</kbd>)。</p>
+</div>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">var metaKeyPressed = <em>instanceOfKeyboardEvent</em>.metaKey
+</pre>
+
+<h3 id="返回值">返回值</h3>
+
+<p>一个布尔值</p>
+
+<h2 id="Example" name="Example">示例</h2>
+
+<pre class="brush: js"> function goInput(e) {
+ // 检测metaKey值
+ if (e.metaKey) {
+ // 继续处理事件
+ superSizeOutput(e);
+ } else {
+ doOutput(e);
+ }
+ }
+</pre>
+
+<p>{{ EmbedLiveSample('Example', 400, 36) }}</p>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">规范版本</th>
+ <th scope="col">规范状态</th>
+ <th scope="col">备注</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('DOM3 Events','#widl-KeyboardEvent-ctrlKey','KeyboardEvent.ctrlKey')}}</td>
+ <td>{{Spec2('DOM3 Events')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">浏览器兼容性</h2>
+
+<p>{{Compat("api.KeyboardEvent.metaKey")}}</p>
+
+<h2 id="See_also" name="See_also">相关链接</h2>
+
+<ul>
+ <li>{{ domxref("KeyboardEvent") }}</li>
+</ul>
diff --git a/files/zh-cn/web/api/keyboardevent/repeat/index.html b/files/zh-cn/web/api/keyboardevent/repeat/index.html
new file mode 100644
index 0000000000..d18d39473e
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/repeat/index.html
@@ -0,0 +1,85 @@
+---
+title: KeyboardEvent.repeat
+slug: Web/API/KeyboardEvent/repeat
+tags:
+ - KeyboardEvent
+translation_of: Web/API/KeyboardEvent/repeat
+---
+<p>{{APIRef("DOM Events")}}</p>
+
+<p><code><strong>KeyboardEvent.repeat</strong></code>是一个只读属性,返回一个布尔值{{jsxref("Boolean")}},如果按键被一直按住,返回值为<code>true</code>。</p>
+
+<h2 id="语法">语法</h2>
+
+<pre>var <em>repeat</em> = <em>event</em>.repeat;</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('DOM3 Events', '#widl-KeyboardEvent-repeat', 'KeyboardEvent.repeat')}}</td>
+ <td>{{Spec2('DOM3 Events')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="兼容性">兼容性</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoDesktop(28) }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoMobile(28) }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
diff --git a/files/zh-cn/web/api/keyboardevent/shiftkey/index.html b/files/zh-cn/web/api/keyboardevent/shiftkey/index.html
new file mode 100644
index 0000000000..29f5baefdc
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/shiftkey/index.html
@@ -0,0 +1,128 @@
+---
+title: KeyboardEvent.shiftKey
+slug: Web/API/KeyboardEvent/shiftKey
+tags:
+ - API
+ - DOM
+ - KeyboardEvent
+ - events
+ - 鼠标事件
+translation_of: Web/API/KeyboardEvent/shiftKey
+---
+<p>{{APIRef("DOM Events")}}</p>
+
+<p><strong><code>KeyboardEvent.shiftKey</code></strong> 只读属性返回一个 {{jsxref("Boolean")}} 值,表示事件触发时 <kbd>shift</kbd> 键是 (<code>true</code>) 否(<code>false</code>)按下。</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">var <em>shiftKeyPressed</em> = <em>instanceOfKeyboardEvent</em>.shiftKey
+</pre>
+
+<h3 id="返回值">返回值</h3>
+
+<p>布尔值</p>
+
+<h2 id="Example" name="Example">示例</h2>
+
+<pre class="brush: js">&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;shiftKey example&lt;/title&gt;
+
+&lt;script type="text/javascript"&gt;
+
+function showChar(e){
+ alert(
+ "Key Pressed: " + String.fromCharCode(e.charCode) + "\n"
+ + "charCode: " + e.charCode + "\n"
+ + "SHIFT key pressed: " + e.shiftKey + "\n"
+ + "ALT key pressed: " + e.altKey + "\n"
+ );
+}
+
+&lt;/script&gt;
+&lt;/head&gt;
+
+&lt;body onkeypress="showChar(event);"&gt;
+&lt;p&gt;Press any character key, with or without holding down
+ the SHIFT key.&lt;br /&gt;
+You can also use the SHIFT key together with the ALT key.&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<h2 id="标准">标准</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('DOM3 Events','#widl-KeyboardEvent-shiftKey','KeyboardEvent.shiftKey')}}</td>
+ <td>{{Spec2('DOM3 Events')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">浏览器兼容性</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>特性</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Chrome</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>基本支持</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ <td>{{CompatVersionUnknown()}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>特性</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>Android</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>基本支持</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">参考</h2>
+
+<ul>
+ <li>{{ domxref("KeyboardEvent") }}</li>
+</ul>
diff --git a/files/zh-cn/web/api/keyboardevent/which/index.html b/files/zh-cn/web/api/keyboardevent/which/index.html
new file mode 100644
index 0000000000..56136f398e
--- /dev/null
+++ b/files/zh-cn/web/api/keyboardevent/which/index.html
@@ -0,0 +1,101 @@
+---
+title: KeyboardEvent.which
+slug: Web/API/KeyboardEvent/which
+tags:
+ - Code
+ - DOM
+ - Key
+ - KeyboardEvent
+ - keyCode
+ - which
+translation_of: Web/API/KeyboardEvent/which
+---
+<div>{{ APIRef("DOM Events") }} {{Deprecated_header}}</div>
+
+<p>{{domxref("KeyboardEvent")}} 接口的 <code><strong>which</strong></code> 只读属性返回所按下键的数字 <code>keyCode </code>或所按下字母数字键的字符代码 (<code>charCode</code>) 。</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox notranslate">var <em>keyResult</em> = <em>event</em>.which;
+</pre>
+
+<h3 id="返回值">返回值</h3>
+
+<ul>
+ <li><code>keyResult</code> contains the numeric code for a particular key pressed, depending on whether an alphanumeric or non-alphanumeric key was pressed. Please see {{domxref("KeyboardEvent.charCode")}} and {{domxref("KeyboardEvent.keyCode")}} for more details.</li>
+</ul>
+
+<h2 id="例子">例子</h2>
+
+<pre class="brush: html notranslate">&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;charCode/keyCode/which example&lt;/title&gt;
+
+&lt;script type="text/javascript"&gt;
+
+function showKeyPress(evt) {
+alert("onkeypress handler: \n"
+ + "keyCode property: " + evt.keyCode + "\n"
+ + "which property: " + evt.which + "\n"
+ + "charCode property: " + evt.charCode + "\n"
+ + "Character Key Pressed: "
+ + String.fromCharCode(evt.charCode) + "\n"
+ );
+}
+
+
+function keyDown(evt) {
+alert("onkeydown handler: \n"
+ + "keyCode property: " + evt.keyCode + "\n"
+ + "which property: " + evt.which + "\n"
+ );
+}
+
+&lt;/script&gt;
+&lt;/head&gt;
+
+&lt;body
+ onkeypress="showKeyPress(event);"
+ onkeydown="keyDown(event);"
+&gt;
+
+&lt;p&gt;Please press any key.&lt;/p&gt;
+
+&lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('DOM3 Events','#legacy-interface-KeyboardEvent','KeyboardEvent.which')}}</td>
+ <td>{{Spec2('DOM3 Events')}}</td>
+ <td>Initial definition; specified as deprecated</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+
+
+<p>{{Compat("api.KeyboardEvent.which")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{domxref("KeyboardEvent")}}, the interface this property belongs too.</li>
+</ul>
+
+<div id="gtx-trans" style="position: absolute; left: 458px; top: 1890px;">
+<div class="gtx-trans-icon"></div>
+</div>