Baseline Widely available
KeyboardEvent
ì¸í°íì´ì¤ì ì½ê¸° ì ì© ìì±ì¸ key
ë í¤ë³´ë ë¡ì¼ì¼ê³¼ ë ì´ììë¿ë§ ìëë¼ Shiftì ê°ì ë³´ì¡° í¤ì ìíê¹ì§ ê³ ë ¤íì¬, ì¬ì©ìê° ë른 í¤ì ê°ì ë°íí©ëë¤.
문ìì´ì ëë¤.
ì´ ê°ì ë¤ìê³¼ ê°ì´ ê²°ì ë©ëë¤.
KeyboardEvent
ê° dead keyì ë림ì ëíë¸ë¤ë©´, í¤ì ê°ì "Dead
"ì¬ì¼ í©ëë¤.WM_APPCOMMAND
ì´ë²¤í¸ë¥¼ ë°ììíµëë¤. ì´ ì´ë²¤í¸ë¤ì ì¤ì í¤ ì½ëê° ìëëë¼ë DOM í¤ë³´ë ì´ë²¤í¸ì 매íëì´ ìì¼ë©°, Windowsì "Virtual key codes"ì ëª
ìëì´ ììµëë¤.Unidentified
ì
ëë¤.KeyboardEvent ìíì¤ì½ìì:
key ê°ë¤ì ì ì²´ 목ë¡ì íì¸íë ¤ë©´ ë르ì¸ì.
모ë KeyboardEvent
ë 미리 ì í´ì§ ìíì¤ ììì ë°ìí©ëë¤. í¤ê° ëë ¸ì ë, Event.preventDefault
ê° í¸ì¶ëì§ ììë¤ê³ ê°ì íë©´ KeyboardEvent
ì ìíì¤ë ë¤ìê³¼ ê°ìµëë¤.
keydown
ì´ë²¤í¸ê° 먼ì ë°ìí©ëë¤. ë§ì½ í¤ê° ì¶ê°ë¡ ëë¦¬ê³ ê·¸ í¤ê° 문ì í¤ë¥¼ ìì±íë¤ë©´, ì´ë²¤í¸ë íë«í¼ 구íì ìì¡´íë ê°ê²©ì¼ë¡ ê³ì ë°ìíê³ , ì½ê¸° ì ì© ìì±ì¸ KeyboardEvent.repeat
ë true
ë¡ ì¤ì ë©ëë¤.<input>
, <textarea>
ëë HTMLElement.contentEditable
ì´ trueë¡ ì¤ì ë ìì ìì ì½ì
ë ì ìë 문ì í¤ë¥¼ ìì±íë ê²½ì°, beforeinput
ê³¼ input
ì´ë²¤í¸ íì
ì´ ììëë¡ ì¤íë©ëë¤. ì¼ë¶ ë¤ë¥¸ 구íììë keypress
ì´ë²¤í¸ê° ì§ìëë¤ë©´ keypress
를 ë°ììí¬ ì ììì 주ìí´ì¼ í©ëë¤. ì´ ì´ë²¤í¸ë¤ì í¤ë¥¼ ëë¥´ê³ ìë ëì ë°ë³µí´ì ë°ìíê² ë©ëë¤.keyup
ì´ë²¤í¸ê° ë°ìí©ëë¤. ì´ê²ì¼ë¡ íë¡ì¸ì¤ê° ìë£ë©ëë¤.ìíì¤ 1ê³¼ 3ìì KeyboardEvent.key
ìì±ì´ ì ìëê³ , ìì ì ìëì´ ìë ê·ì¹ì ë°ë¼ ì ì í ê°ì¼ë¡ ì¤ì ë©ëë¤.
ìêµì í¤ë³´ë ë ì´ììì ì¬ì©í ëì ë¹êµí´ì, 미êµì í¤ë³´ë ë ì´ììì ì¬ì©í Shift ì 2 í¤ì ìí¸ìì©ìì ë°ìíë ì´ë²¤í¸ ìíì¤ì ëí´ ê³ ë ¤í´ ë³´ê² ìµëë¤.
ë¤ìì ë ê°ì í ì¤í¸ ì¼ì´ì¤ë¥¼ ì¬ì©íì¬ ì¤íí´ ë³´ì¸ì.
Shift í¤ë¥¼ ë르면ì,
2 í¤ë¥¼ ë른 ë¤ì ë¼ì¸ì. ê·¸ ë¤ì
Shift í¤ë¥¼ ë¼ì¸ì.
Shift í¤ë¥¼ ë르면ì,
2 í¤ë¥¼ ëë¥´ê³ ìì¼ì¸ì. ê·¸ ë¤ì
Shift í¤ë¥¼ ë¼ì¸ì. ë§ì§ë§ì¼ë¡
2 í¤ë¥¼ ë¼ì¸ì.
<div class="fx">
<div>
<textarea rows="5" name="test-target" id="test-target"></textarea>
<button type="button" name="btn-reset" id="btn-reset">Reset</button>
</div>
<div class="flex">
<pre id="console-log"></pre>
</div>
</div>
CSS
.fx {
-webkit-display: flex;
display: flex;
margin-left: -20px;
margin-right: -20px;
}
.fx > div {
padding-left: 20px;
padding-right: 20px;
}
.fx > div:first-child {
width: 30%;
}
.flex {
-webkit-flex: 1;
flex: 1;
}
#test-target {
display: block;
width: 100%;
margin-bottom: 10px;
}
JavaScript
let textarea = document.getElementById("test-target"),
consoleLog = document.getElementById("console-log"),
btnReset = document.getElementById("btn-reset");
function logMessage(message) {
consoleLog.innerHTML += message + "<br>";
}
textarea.addEventListener("keydown", (e) => {
if (!e.repeat) logMessage(`Key "${e.key}" pressed [event: keydown]`);
else logMessage(`Key "${e.key}" repeating [event: keydown]`);
});
textarea.addEventListener("beforeinput", (e) => {
logMessage(`Key "${e.data}" about to be input [event: beforeinput]`);
});
textarea.addEventListener("input", (e) => {
logMessage(`Key "${e.data}" input [event: input]`);
});
textarea.addEventListener("keyup", (e) => {
logMessage(`Key "${e.key}" released [event: keyup]`);
});
btnReset.addEventListener("click", (e) => {
let child = consoleLog.firstChild;
while (child) {
consoleLog.removeChild(child);
child = consoleLog.firstChild;
}
textarea.value = "";
});
ê²°ê³¼
Case 1ì°¸ê³ :
beforeinput
ê³¼input
ì´ë²¤í¸ì ì¬ì©ëëInputEvent
ì¸í°íì´ì¤ê° ìì í 구íëì§ ìì ë¸ë¼ì°ì ììë ì못ë ì¶ë ¥ 결과를 ì»ì ìë ììµëë¤.
shift
í¤ê° ëë ¸ì ë keydown
ì´ë²¤í¸ê° 먼ì ë°ìíê³ , key
ìì±ì ê°ì 문ìì´ Shift
ê° ë©ëë¤. shift
í¤ë¥¼ ê³ì ëë¥´ê³ ìëë¼ë, 문ì í¤ê° ìë기 ë문ì keydown
ì´ë²¤í¸ê° ë°ë³µì ì¼ë¡ ë°ìíì§ë ììµëë¤.
key 2
ê° ë리면 ë íëì ìë¡ì´ keydown
ì´ë²¤í¸ê° ë°ìíê³ , íì±íë ë³´ì¡° í¤ shift
ë문ì ì´ ì´ë²¤í¸ì key
ìì±ì ê°ì 미êµì í¤ë³´ëììì @
ëë ìêµì í¤ë³´ëììì "
ë¡ ë³ê²½ë©ëë¤. 문ì í¤ê° ìì±ëì기 ë문ì ê·¸ ë¤ìì beforeinput
ì input
ì´ë²¤í¸ë¤ì´ ë°ìí©ëë¤.
key 2
를 ë¼ë©´ keyup
ì´ë²¤í¸ê° ë°ìíê³ , key
ìì±ì í¤ë³´ë ë ì´ììì ë°ë¼ì @
ë "
ì 문ìì´ ê°ì ì ì§í©ëë¤.
ë§ì§ë§ì¼ë¡ shift
í¤ë¥¼ ë¼ë©´ ë ë¤ë¥¸ keyup
ì´ë²¤í¸ê° ë°ìíê³ , key
ìì±ì ê°ì Shift
ë¡ ì ì§ë©ëë¤.
shift
í¤ê° ëë ¸ì ë keydown
ì´ë²¤í¸ê° 먼ì ë°ìíê³ , key
ìì±ì ê°ì 문ìì´ Shift
ê° ë©ëë¤. shift
í¤ë¥¼ ê³ì ëë¥´ê³ ìëë¼ë, 문ì í¤ê° ìë기 ë문ì keydown
ì´ë²¤í¸ê° ë°ë³µì ì¼ë¡ ë°ìíì§ë ììµëë¤.
key 2
ê° ë리면 ë íëì ìë¡ì´ keydown
ì´ë²¤í¸ê° ë°ìíê³ , íì±íë ë³´ì¡° í¤ shift
ë문ì ì´ ì´ë²¤í¸ì key
ìì±ì ê°ì 미êµì í¤ë³´ëììì @
ëë ìêµì í¤ë³´ëììì "
ë¡ ë³ê²½ë©ëë¤. 문ì í¤ê° ìì±ëì기 ë문ì ê·¸ ë¤ìì beforeinput
ì input
ì´ë²¤í¸ë¤ì´ ë°ìí©ëë¤. í¤ê° ê³ì ë리ë ëì keydown
ì´ë²¤í¸ê° ë°ë³µì ì¼ë¡ ë°ìíê³ , KeyboardEvent.repeat
ìì±ì true
ê° ë©ëë¤. ëí beforeinput
ê³¼ input
ì´ë²¤í¸ë ë°ë³µì ì¼ë¡ ë°ìí©ëë¤.
shift
í¤ë¥¼ ë¼ë©´ keyup
ì´ë²¤í¸ê° ë°ìíê³ , key
ìì±ì Shift
ë¡ ì ì§ë©ëë¤. ì´ ë, ë³´ì¡° í¤ì¸ shift
ê° ë ì´ì íì±íëì´ ìì§ ì기 ë문ì key 2
ì ë°ë³µëë keydown
ì´ë²¤í¸ì ëí key
ìì±ì ê°ì´ ì´ì "2"ê° ëìë¤ë ê²ì 주ìí´ì¼ í©ëë¤. ì´ê²ì beforeinput
ê³¼ input
ì´ë²¤í¸ì InputEvent.data
ìì±ìë ëê°ì´ ì ì©ë©ëë¤.
ë§ì§ë§ì¼ë¡ key 2
를 ë¼ë©´ keyup
ì´ë²¤í¸ê° ë°ìíì§ë§, ë³´ì¡° í¤ì¸ shift
ê° ë ì´ì íì±íëì´ ìì§ ìì¼ë¯ë¡ key
ìì±ì ë í¤ë³´ë 모ëìì 문ìì´ 2
ë¡ ì¤ì ë©ëë¤.
ì´ ìì ë keydown
ì´ë²¤í¸ë¥¼ ì²ë¦¬í기 ìí´ EventTarget.addEventListener()
를 ì¬ì©í©ëë¤. ì´ë²¤í¸ê° ë°ìíë©´ í¤ì ê°ì´ ì½ëìì ì¸ê¸ë í¤ ì¤ì íëì¸ì§ íì¸íê³ , ë§ì½ ê·¸ë ë¤ë©´ ê°ê°ì ë°©ì(ê²ììì ì°ì£¼ì ì ì¡°ì¢
íê±°ë, ì¤íë ëìí¸ìì ì íí ì
ì ë³ê²½íë ë±)ì¼ë¡ ì²ë¦¬ë©ëë¤.
window.addEventListener(
"keydown",
function (event) {
if (event.defaultPrevented) {
return; // ì´ë¯¸ ì´ë²¤í¸ê° ì¤íëë ì¤ì´ë¼ë©´ ì무 ëìë íì§ ììµëë¤.
}
switch (event.key) {
case "Down": // IE/Edgeìì ì¬ì©ëë ê°
case "ArrowDown":
// "ìë íì´í" í¤ê° ëë ¸ì ëì ëìì
ëë¤.
break;
case "Up": // IE/Edgeìì ì¬ì©ëë ê°
case "ArrowUp":
// "ì íì´í" í¤ê° ëë ¸ì ëì ëìì
ëë¤.
break;
case "Left": // IE/Edgeìì ì¬ì©ëë ê°
case "ArrowLeft":
// "ì¼ìª½ íì´í" í¤ê° ëë ¸ì ëì ëìì
ëë¤.
break;
case "Right": // IE/Edgeìì ì¬ì©ëë ê°
case "ArrowRight":
// "ì¤ë¥¸ìª½ íì´í" í¤ê° ëë ¸ì ëì ëìì
ëë¤.
break;
case "Enter":
// "enter" ëë "return" í¤ê° ëë ¸ì ëì ëìì
ëë¤.
break;
case "Esc": // IE/Edgeìì ì¬ì©ëë ê°
case "Escape":
// "esc" í¤ê° ëë ¸ì ëì ëìì
ëë¤.
break;
default:
return; // í¤ ì´ë²¤í¸ë¥¼ ì²ë¦¬íì§ ìëë¤ë©´ ì¢
ë£í©ëë¤.
}
// ë ë² ëìíë ê²ì ë§ê¸° ìí´ ê¸°ë³¸ ëìì ì·¨ìí©ëë¤.
event.preventDefault();
},
true,
);
ëª
ì¸ì ë¸ë¼ì°ì í¸íì±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4