Zdarzenia#
Typ keydown#
Typ: | keydown |
---|---|
Interfejs: | KeyboardEvent |
Sync / Async: | Sync |
Bąbelkowanie | Tak |
Zaufane cele | Element |
Anulowanie | Tak |
Domyślna akcja | Zmienna: zdarzenia beforeinput i input ; uruchomienie systemu kompozycji tekstu; zdarzenia blur i focus ; zdarzenie keypress ; aktywujące zachowanie; inne zdarzenia |
Kontekst (zaufane zdarzenia) |
|
Zdarzenie typu keydown
musi zostać wysłane przez aplikację kliencką w chwili, kiedy klawisz został wciśnięty. Zdarzenie keydown
jest zależne od urządzenia i opiera się na możliwościach urządzeń wejściowych oraz sposobu ich mapowania w systemie operacyjnym. Zdarzenie to musi zostać wygenerowane po mapowaniu klawisza. Zdarzenie to musi zostać wysłane przed zdarzeniami beforeinput
, input
i keyup
powiązanymi z tym samym klawiszem.
Domyślna akcja dla zdarzenia typu keydown
zależy od klawisza:
- Jeśli klawisz jest skojarzony ze znakiem to domyślną akcją musi być wysłanie zdarzenia
beforeinput
, i następnie zdarzeniainput
. W przypadku, kiedy klawisz jest skojarzony z wieloma znakami (np. z uwagi na makro lub sekwencję niektórych martwych klawiszy) to domyślną akcją musi być wysłanie jednego zestawu zdarzeńbeforeinput
/input
dla każdego znaku. - Jeśli klawisz jest skojarzony z systemem kompozycji tekstu to domyślą akcją musi być uruchomienie tego systemu.
- Jeśli klawisz jest klawiszem
'Tab'
to domyślną akcją musi być przeniesienie zogniskowania dokumentu z aktualnie zogniskowanego elementu (jeśli istnieje) do nowego ogniskującego elementu, jak opisano w module zdarzeń zogniskowania. - Jeśli klawisz jest klawiszem
'Enter'
lub' '
(spacja) i bieżące zogniskowanie jest na elemencie zmieniającym stan, to domyślną akcją musi być wysłanie zdarzeniaclick
, a następnie zdarzeniaDOMActivate
jeśli jest ono wspierane przez aplikację kliencką (szczegóły znajdują się w podrozdziale "Aktywujące wyzwalacze i zachowania").
Jeśli zdarzenie typu keydown
zostanie anulowane to skojarzone z nim inne typy zdarzeń nie mogą być wysyłane, i powiązane akcje nie mogą być wykonywane.
Zdarzenia typu keydown
i keyup
zostały przewidziane do wykrywania dowolnego klawisza, a nie tylko tego, który produkuje wartość znakową.
Prosty przykład:
<!DOCTYPE html>
<html>
<head>
<style>
input {vertical-align: top;}
input:hover, #box:hover {outline: 3px solid green;}
#box {width: 200px; height: 100px; display: inline-block; background-color: #a08080;}
</style>
</head>
<body>
<p>Edytuj zawartość poniższych elementów przy użyciu klawiatury by odczytać poszczególne cechy zdarzenia.</p>
<div id="box" contenteditable="true">Edytowalny kontener</div>
<input size="40" type="text" value="Jakiś początkowy tekst">
<p style="color: blue;">Szczegółowe informacje dla przechwyconego zdarzenia:</p>
<p id="info"></p>
<script>
var box = document.getElementById("box");
var input = document.getElementsByTagName("input")[0];
var info = document.getElementById("info");
function readInfo(e){
var loc_cons = ["DOM_KEY_LOCATION_STANDARD", "DOM_KEY_LOCATION_LEFT", "DOM_KEY_LOCATION_RIGHT", "DOM_KEY_LOCATION_NUMPAD"];
var data = "Interfejs: " + e
+ "<br>" + "e.type: " + e.type
+ "<br>" + "e.target: " + e.target
+ "<br>" + "e.view: " + e.view
+ "<br>" + "e.detail: " + e.detail
+ "<br>" + "e.code: " + e.code
+ "<br>" + "e.key: " + e.key
+ "<br>" + "e.repeat: " + e.repeat
+ "<br>" + "e.isComposing: " + e.isComposing
+ "<br>" + "e.location: " + e.location + " [" + loc_cons[e.location] + "]"
+ "<br>" + "e.currentTarget: " + e.currentTarget
+ "<br>" + "e.eventPhase: " + e.eventPhase + "<br><br>";
info.innerHTML = info.innerHTML + data;
}
box.addEventListener("keydown", readInfo, false);
box.addEventListener("keyup", readInfo, false);
input.addEventListener("keydown", readInfo, false);
input.addEventListener("keyup", readInfo, false);
</script>
</body>
</html>