Remove references to the (obsolete) KeyboardEvent.char attribute.
authorGary Kacmarcik <garykac@google.com>
Sat, 17 Aug 2013 08:54:49 -0700
changeset 447 0bb02db12d79
parent 446 c0d0919d6111
child 448 3ee715d0997e
Remove references to the (obsolete) KeyboardEvent.char attribute.
html/DOM3-Events.html
--- a/html/DOM3-Events.html	Sat Aug 17 06:58:15 2013 -0700
+++ b/html/DOM3-Events.html	Sat Aug 17 08:54:49 2013 -0700
@@ -232,7 +232,7 @@
 				<dt>Key and character values</dt>
 				<dd>
 					This is a key name: <code class="key">'Spacebar'</code> (e.g., the value of <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>); this is the equivalent character
-					value: <code class="char">'\u0020'</code> (e.g., the value of <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a>). This is a glyph that represents that same
+					value: <code class="char">'\u0020'</code>. This is a glyph that represents that same
 					character value: <code class="glyph">' '</code>.
 				</dd>
 
@@ -4336,23 +4336,12 @@
 							</div>
 						</dd>
 
-						<dt>readonly attribute DOMString char</dt>
-						<dd>
-							<p><code>char</code> holds the character value of the key pressed.  If the key press has a printed representation, then the value MUST be a non-empty Unicode character
-								string, conforming to the <a href="#key-algorithm">algorithm for determining the key value</a> defined in this specification.  For a key associated with a macro
-								to insert multiple characters, the value of the <code>char</code> attribute will hold the entire sequence of characters.  For a key which does not have a character
-								representation, the value MUST be the <a class="def" href="#glossary-empty-string">empty string</a>.</p>
-
-							<p class="note"><strong>Note:</strong> The <code>char</code> attribute is not related to the legacy <code>charCode</code> attribute and does
-								not have the same set of values.</p>
-
-							<p>The <a class="def" href="#glossary-un-initialized-value">un-initialized value</a> of this attribute MUST be <code>""</code> (the empty string).</p>
-						</dd>
-
 						<dt>readonly attribute DOMString key</dt>
 						<dd>
-							<p><code>key</code> holds the key value of the key pressed.  If the value is has a printed representation, it MUST match the value of the <a href="#events-KeyboardEvent-char">
-								<code>KeyboardEvent.char</code></a> attribute; if the value is a control key which has no printed representation, it MUST be one of the key values defined in the
+							<p><code>key</code> holds the key value of the key pressed.
+								If the value is has a printed representation, it MUST be a non-empty Unicode character
+								string, conforming to the <a href="#key-algorithm">algorithm for determining the key value</a> defined in this specification.
+								If the value is a control key which has no printed representation, it MUST be one of the key values defined in the
 								<a href="#keys-keyvalues">key values set</a>, as determined by the <a href="#key-algorithm">algorithm for determining the key value</a>. Implementations that are
 								unable to identify a key MUST use the key value <a href="#key-Unidentified"><code class="key">'Unidentified'</code></a>.</p>
 
@@ -4467,7 +4456,7 @@
 					<a class="def" href="#glossary-character-value">character value</a>.  In practice, <code>keyCode</code> and <code>charCode</code> are inconsistent across platforms
 					and even the same implementation on different operating systems or using different localizations.  DOM Level 3 Events  does not define values for either
 					<code>keyCode</code> or <code>charCode</code>, or behavior for <code>charCode</code>; content authors can use <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>
-					or <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> instead, in conforming DOM Level 3 Events implementations. <em>For more information, see
+					instead, in conforming DOM Level 3 Events implementations. <em>For more information, see
 					the informative appendix on <a href="#legacy-key-attributes">Legacy key attributes: keyCode, charCode, and which</a>.</em></p>
 
 				<p class="note"><strong>Note:</strong> For compatibility with existing content, virtual keyboards, such as software keyboards on screen-based
@@ -4560,7 +4549,6 @@
 												input element focused</li>
 											<li><a href="#events-UIEvent-view"><code class="attribute-name">UIEvent.view</code></a>: <a class="def" href="#glossary-defaultView"><code>defaultView</code></a></li>
 											<li><a href="#events-UIEvent-detail"><code class="attribute-name">UIEvent.detail</code></a>: <code>0</code></li>
-											<li><a href="#events-KeyboardEvent-char"><code class="attribute-name">KeyboardEvent.char</code></a>: the character value of the key pressed.</li>
 											<li><a href="#events-KeyboardEvent-key"><code class="attribute-name">KeyboardEvent.key</code></a>: the key value of the key pressed.</li>
 											<li><a href="#events-KeyboardEvent-location"><code class="attribute-name">KeyboardEvent.location</code></a>: the location of the key on the device.</li>
 											<li><a href="#events-KeyboardEvent-altKey"><code class="attribute-name">KeyboardEvent.altKey</code></a>: <code>true</code> if <a href="#key-Alt"><code class="key">
@@ -4658,7 +4646,6 @@
 												input element focused</li>
 											<li><a href="#events-UIEvent-view"><code class="attribute-name">UIEvent.view</code></a>: <a class="def" href="#glossary-defaultView"><code>defaultView</code></a></li>
 											<li><a href="#events-UIEvent-detail"><code class="attribute-name">UIEvent.detail</code></a>: <code>0</code></li>
-											<li><a href="#events-KeyboardEvent-char"><code class="attribute-name">KeyboardEvent.char</code></a>: the character value of the key pressed.</li>
 											<li><a href="#events-KeyboardEvent-key"><code class="attribute-name">KeyboardEvent.key</code></a>: the key value of the key pressed.</li>
 											<li><a href="#events-KeyboardEvent-location"><code class="attribute-name">KeyboardEvent.location</code></a>: the location of the key on the device.</li>
 											<li><a href="#events-KeyboardEvent-altKey"><code class="attribute-name">KeyboardEvent.altKey</code></a>: <code>true</code> if <a href="#key-Alt"><code class="key">
@@ -4737,7 +4724,6 @@
 												input element focused</li>
 											<li><a href="#events-UIEvent-view"><code class="attribute-name">UIEvent.view</code></a>: <a class="def" href="#glossary-defaultView"><code>defaultView</code></a></li>
 											<li><a href="#events-UIEvent-detail"><code class="attribute-name">UIEvent.detail</code></a>: <code>0</code></li>
-											<li><a href="#events-KeyboardEvent-char"><code class="attribute-name">KeyboardEvent.char</code></a>: the character value of the key pressed.</li>
 											<li><a href="#events-KeyboardEvent-key"><code class="attribute-name">KeyboardEvent.key</code></a>: the key value of the key pressed.</li>
 											<li><a href="#events-KeyboardEvent-location"><code class="attribute-name">KeyboardEvent.location</code></a>: the location of the key on the device.</li>
 											<li><a href="#events-KeyboardEvent-altKey"><code class="attribute-name">KeyboardEvent.altKey</code></a>: <code>true</code> if <a href="#key-Alt"><code class="key">
@@ -5843,8 +5829,8 @@
 				as for keyboard shortcuts).  This specification defines a set of common key values (called the <a href="#key-values">Key Values Set</a>), and rules for production
 				of new key values.</p>
 
-			<p>Key values can be used to detect the value of a key which has been pressed, using the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> or
-				<a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attributes.  Content authors can retrieve the <a class="def" href="#glossary-character-value">
+			<p>Key values can be used to detect the value of a key which has been pressed, using the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>
+				attribute.  Content authors can retrieve the <a class="def" href="#glossary-character-value">
 				character value</a> of upper- or lower-case letters, number, symbols, or other character-producing keys, and also the <a class="def" href="#glossary-key-value">key
 				value</a> of control keys, modifier keys, function keys, or other keys that do not generate characters; these values can be used for monitoring particular
 				input strings, for detecting and acting on modifier key input in combination with other inputs (such as a mouse), for creating virtual keyboards, or for any number
@@ -5868,7 +5854,7 @@
 				in a shifted state during a dead-key operation to add an umlaut diacritic.  Because a user can map their keyboard to an arbitrary custom configuration, the content
 				author is encouraged not to assume that a relationship exists between the shifted and unshifted states of a key and the majuscule form (uppercase or capital letters)
 				and minuscule form (lowercase or small letters) of a character representation, but is encouraged instead to use the value of the <a href="#events-KeyboardEvent-key">
-				<code>KeyboardEvent.key</code></a> or <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attributes.  The keyboard depicted in <a href="#figure-keyboard">
+				<code>KeyboardEvent.key</code></a> attribute.  The keyboard depicted in <a href="#figure-keyboard">
 				Figure 4</a> illustrates one possible set of <a class="def" href="#glossary-key-mapping">key mappings</a> on one possible keyboard layout; many others exist,
 				both standard and idiosyncratic.</p>
 
@@ -5881,15 +5867,6 @@
 				custom keyboard layouts MAY duplicate any key value in multiple key-state scenarios (note that <a href="#events-KeyboardEvent-location"><code>KeyboardEvent.location</code></a>
 				is intended for standard keyboard layouts, and cannot always indicate a meaningful distinction).</p>
 
-			<p>Similarly, a given key event state MAY have different key values.  For most keys which represent characters, such as the letter <code class="glyph">'m'</code> or the question
-				mark (<code class="glyph">'?'</code>), the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> and <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a>
-				attributes will be the same.  However, for <em>printing control characters</em>, such as the backspace/back key, the <em>character value</em> is distinct from the
-				<em>key value</em>, with different values for the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> and <a href="#events-KeyboardEvent-char"><code>
-				KeyboardEvent.char</code></a> attributes; see the <a href="#key-values">Key Values Set</a> for more details.  Certain keys in some states, called <em>modifier keys</em>
-				or <em>control keys</em>, have only a <a class="def" href="#glossary-key-value">key value</a> and no <a class="def" href="#glossary-character-value">character value</a>,
-				such as the volume mute key, which has the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute value <code class="key">'VolumeMute'</code>
-				and the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute value the <a class="def" href="#glossary-empty-string">empty string</a>.</p>
-
 			<p>Finally, the meaning of any given character representation is context-dependent and complex.  For example, in some contexts, the asterisk (star) glyph (<code
 				class="glyph">'*'</code>) represents a footnote or emphasis (when bracketing a passage of text); however, in some documents or executable programs it is equivalent
 				to the mathematical multiplication operation, while in other documents or executable programs, that function is reserved for the multiplication symbol (<code class="glyph">'&#xD7;'</code>,
@@ -6783,29 +6760,20 @@
 				<ol class="algo" id="key-algorithm">
 					<li>If the primary current function of the key is to generate a character, then:
 						<ol class="algo">
-							<li>If there exists an appropriate character in the <a href="#keys-keyvalues">key values set</a>, then:
-								<ol class="algo">
-									<li>the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute MUST be a string consisting of the <em>key value</em> of that character; and</li>
-									<li>the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute MUST be a string consisting of the <em>char value</em> of that character.</li>
-								</ol>
-							</li>
+							<li>If there exists an appropriate character in the <a href="#keys-keyvalues">key values set</a>, then
+								the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute MUST be a string consisting
+								of the <em>key value</em> of that character.</li>
 							<li>If there is no appropriate key value in the <a href="#keys-keyvalues">key values set</a>, and there exists an appropriate <a class="def" href="#glossary-unicode-code-point">
-								Unicode code point</a>, then:
-								<ol class="algo">
-									<li>the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute MUST be a string consisting of the <em>char value</em> of that character; and</li>
-									<li>the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute MUST be a string consisting of the <em>char value</em> of that character.</li>
-								</ol>
-							</li>
+								Unicode code point</a>, then
+								the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute MUST be a string consisting
+								of the <em>char value</em> of that character.</li>
 						</ol>
 					</li>
 					<li>If the primary current function of the key is to serve as a function key, then:
 						<ol class="algo">
 							<li>If there exists an appropriate key value in the <a href="#keys-keyvalues">key values set</a>, then:
-								<ol class="algo">
-									<li>the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute MUST be a string consisting of the <em>key value</em> of that character; and</li>
-									<li>the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute MUST be the <a class="def" href="#glossary-empty-string">empty string</a>.</li>
-								</ol>
-							</li>
+								the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute MUST be a string consisting
+								of the <em>key value</em> of that character.</li>
 						</ol>
 					</li>
 				</ol>
@@ -6816,11 +6784,11 @@
 						<li>On a PC/AT US keyboard with a right-handed single-hand Dvorak <a class="def" href="#glossary-key-mapping">key mapping</a>, the key labeled <code class="key">
 							'Q'</code> maps to the key values <code class="key">'5'</code> (unmodified) and <code class="key">'%'</code> (shifted).  The primary function of this key
 							is to generate the character <code class="key">'5'</code> (<code class="char">'\u0035'</code>).  Since this character is a character (in Unicode general category
-							<abbr title="Number, Decimal Digit">Nd</abbr>), the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> and <a href="#events-KeyboardEvent-char">
-							<code>KeyboardEvent.char</code></a> attribute values for the unmodified key will be <code class="key">'5'</code>.</li>
+							<abbr title="Number, Decimal Digit">Nd</abbr>), the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>
+							attribute value for the unmodified key will be <code class="key">'5'</code>.</li>
 						<li>On a French PC keyboard with a standard French mapping, the primary function of the <code class="key">'^'</code> key is as a <a class="def" href="#glossary-dead-key">
-							dead key</a> for the circumflex diacritical mark.  This corresponds to the combining Unicode character <code class="char">'\u0302'</code>.  Since this character
-							is in general category
+							dead key</a> for the circumflex diacritical mark. While the Unicode value <code class="char">'\u0302'</code> exists for this character, there is
+							also the value <code class="key">'DeadCircumflex'</code> defined in the <a href="#keys-keyvalues">key values set</a> that takes precedence.
 							<abbr title="Mark, Nonspacing">Mn</abbr>, the key value will be <code class="char">'\u0302'</code>.</li>
 						<li>On a Korean PC keyboard with a standard Korean mapping, the primary function of the <code class="key">'Ha/En'</code> key is to switch between Hangul and English
 							input.  The predefined key value list has an appropriate entry for this key, <code class="key">'HangulMode'</code>, so this will be the key value.</li>
@@ -6836,26 +6804,26 @@
 
 				<p>This section defines a list of key values which implementations MUST support, at a minimum, in addition to support for the full range of Unicode [<a href="#references-Unicode">Unicode</a>]
 					codepoints.  Implementations MAY support additional key values, in a manner conforming to the <a href="#keys-Guide">guidelines for selecting and defining key values</a>.
-					Each key value defines one or both of the following: a <a class="def" href="#glossary-character-value">character value</a> and a <a class="def" href="#glossary-key-value">
-					key value</a>.  The <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute of an event MUST always contain one of these control key
-					or character values (even if the value is <a href="#key-Unidentified"><code class="key">'Unidentified'</code></a>), and the <a href="#events-KeyboardEvent-char">
-					<code>KeyboardEvent.char</code></a> attribute MUST have a value if the key represents a printable character.  If the key represents one of the set of printable
+					The <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute of an event MUST always contain one of these control key
+					or character values (even if the value is <a href="#key-Unidentified"><code class="key">'Unidentified'</code></a>). If the key represents one of the set of printable
 					control characters which has a Unicode character entry, such as the tab key, the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute
-					MUST have the key value (e.g., <a href="#key-Tab"><code class="key">'Tab'</code></a>), while the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a>
-					attribute MUST have the Unicode character value equivalent (e.g., <a href="#key-U-0009"><code class="char">'\u0009'</code></a>).  This affords content authors
-					the opportunity to deal with the key as a control key or as direct input into the text stream.</p>
+					MUST have the key value (e.g., <a href="#key-Tab"><code class="key">'Tab'</code></a>).</p>
 
 				<p>Implementations that are unable to identify a key MUST use the key value <a href="#key-Unidentified"><code class="key">'Unidentified'</code></a>.</p>
 
 				<p class="warning"><strong>Warning!</strong> Conforming implementations MUST only use this key value when there is no way for the implementation to detect the key value;
 					exposing only this value MUST NOT indicate a conforming implementation.</p>
 
-				<p>The <a class="def" href="#glossary-key-value">key values</a> defined in this specification are based in part on the sets of keycodes from the <code>java.awt.event.KeyEvent</code>
-					interface of the Java Platform, Standard Edition 6 API Specification [<cite><a class="informative" href="#references-KeyEvent">KeyEvent for Java</a></cite>], and
-					the <code>System.Windows.Forms.Keys</code> key enumeration of the Microsoft .NET Framework 4.0 Class Library [<cite><a class="informative" href="#references-Keys">Keys
-					enumeration for .Net</a></cite>]; the key values for media controllers (e.g. remote controls for television, audio systems, and set-top boxes) are derived in part from the consumer electronics technical
-					specifications DTV Application Software Environment [<cite><a href="#references-DASE">DASE</a></cite>], Open Cable Application Platform 1.1.3 [<cite><a href="#references-OCAP">OCAP</a></cite>],
-					and ANSI/CEA-2014-B, Web-based Protocol and Framework for Remote User Interface on UPnPTM Networks and the Internet [<cite><a href="#references-WEB4CE">WEB4CE</a></cite>].
+				<p>The <a class="def" href="#glossary-key-value">key values</a> defined in this specification are based in part on the sets of keycodes from
+					the <code>java.awt.event.KeyEvent</code> interface of the Java Platform, Standard Edition 6 API Specification
+						[<cite><a class="informative" href="#references-KeyEvent">KeyEvent for Java</a></cite>],
+					and the <code>System.Windows.Forms.Keys</code> key enumeration of the Microsoft .NET Framework 4.0 Class Library
+						[<cite><a class="informative" href="#references-Keys">Keys enumeration for .Net</a></cite>].
+					The key values for media controllers (e.g. remote controls for television, audio systems, and set-top boxes) are derived in part from the consumer
+					electronics technical specifications:
+						DTV Application Software Environment [<cite><a href="#references-DASE">DASE</a></cite>],
+						Open Cable Application Platform 1.1.3 [<cite><a href="#references-OCAP">OCAP</a></cite>],
+						and ANSI/CEA-2014-B, Web-based Protocol and Framework for Remote User Interface on UPnPTM Networks and the Internet [<cite><a href="#references-WEB4CE">WEB4CE</a></cite>].
 					</p>
 
 				<p class="note"><strong>Note:</strong> The key names <code class="key">'NumPad0'</code>, <code class="key">'NumPad1'</code>, <code class="key">
@@ -6866,12 +6834,9 @@
 
 				<p>Future versions of this specification MAY include key values not included here, which have become common since the publication of this specification.</p>
 
-				<p>In the following list, character values for printing control characters are described as a character escape, for convenience, using the JavaScript notation for
-					escapes.</p>
-
 				<div class="note">
 					<p><strong>Note:</strong> There are special internationalization considerations for ECMAScript escaped characters.  CharMod conformance [<cite><a class="normative"
-						href="#references-charmod">CharMod</a></cite>] <a href="http://www.w3.org/TR/charmod/#C045">expects</a> the use of code points rather than surrogate pairs in escapes;
+						href="#references-charmod">CharMod</a></cite>] <a href="http://www.w3.org/TR/charmod/#C045">expects</a> the use of code points rather than surrogate pairs in escapes.
 						ECMAScript escaped characters use surrogate pairs for characters outside the Basic Multilingual Plane (<code class="char">"\uD84E\uDDC2"</code> for <code class="glyph">'&#x239C2;'</code>,
 						a Chinese character meaning <q>untidy</q>), rather than C-style fixed-length characters (<code class="char">"\U000239c2"</code> for <code class="glyph">'&#x239C2;'</code>) or delimited escapes
 						such as Numeric Character References (<code>"&amp;#x239C2;"</code>). Characters escaped in this manner:</p>
@@ -6889,7 +6854,7 @@
 					<h4>Key Values List</h4>
 					<p>The following list contains the normative list of case-sensitive key values, their character values (where applicable), an informative description of typical usage,
 						and an informative categorization.  A conforming implementation of the <a href="#events-KeyboardEvent">KeyboardEvent</a> interface MUST support at least this set
-						of values for use in the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> and <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>
+						of values for use in the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>
 						attributes, though not all values MAY be available on all platforms or devices.</p>
 
 					<!-- Key tables. Note that all keys must be defined within a <div class="key-table"> -->
@@ -7478,7 +7443,6 @@
 					<dt>AbstractView? view = null</dt><dd></dd>
 					<dt>long detail = 0</dt><dd></dd>
 					<!-- Attributes from KeyboardEvent -->
-					<dt>DOMString char = ""</dt><dd></dd>
 					<dt>DOMString key = ""</dt><dd></dd>
 					<dt>unsigned long location = 0</dt><dd></dd>
 					<dt>boolean ctrlKey = false</dt><dd></dd>
@@ -7519,9 +7483,6 @@
 							<dt>long detailArg</dt>
 							<dd><p>Refer to the <a href="#events-event-type-initUIEvent"><code>UIEvent.initUIEvent()</code></a> method for a description of this parameter.</p></dd>
 
-							<dt>DOMString charArg</dt>
-							<dd><p>Specifies <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a>.</p></dd>
-
 							<dt>DOMString keyArg</dt>
 							<dd><p>Specifies <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>.</p></dd>
 
@@ -7612,8 +7573,8 @@
 
 		<p>Therefore, this specification does not normatively define the <code class="attribute-name">charCode</code>, <code class="attribute-name">keyCode</code>, or <code
 			class="attribute-name">which</code> attributes on the <a href="#events-KeyboardEvent">KeyboardEvent</a> interface, though they MAY be present in <a class="def" href="#glossary-user-agent">
-			user agents</a> for compatibility with legacy content.  Authors SHOULD use the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> and <a href="#events-KeyboardEvent-key">
-			<code>KeyboardEvent.key</code></a> attributes instead of the <code class="attribute-name">charCode</code> and <code class="attribute-name">keyCode</code>
+			user agents</a> for compatibility with legacy content.  Authors SHOULD use the <a href="#events-KeyboardEvent-key">
+			<code>KeyboardEvent.key</code></a> attribute instead of the <code class="attribute-name">charCode</code> and <code class="attribute-name">keyCode</code>
 			attributes, respectively.</p>
 
 		<p>However, for the purpose of documenting the current state of these attributes and their relation to equivalent key values, this section describes an informative
@@ -7651,8 +7612,8 @@
 						<dt>readonly attribute unsigned long keyCode</dt>
 						<dd>
 							<p><code class="attribute-name">keyCode</code> holds a system- and implementation-dependent numerical code signifying the unmodified identifier associated with the
-								key pressed. Unlike the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> or <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a>
-								attributes, the set of possible values are not normatively defined in this specification; typically, these value of the <code class="attribute-name">keyCode</code>
+								key pressed. Unlike the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>
+								attribute, the set of possible values are not normatively defined in this specification; typically, these value of the <code class="attribute-name">keyCode</code>
 								SHOULD represent the decimal codepoint in ASCII [<a href="#ref-rfc20">RFC20</a>][<a href="#ref-US-ASCII">US-ASCII</a>] or Windows 1252 [<a href="#ref-WIN1252">WIN1252</a>],
 								but MAY be drawn from a different appropriate character set. Implementations that are unable to identify a key use the key value <code class="key">'0'</code>.</p>