keydown
=======

O evento `keydown` é disparado quando uma tecla é pressionada. Diferente do evento `keypress`, o `keydown` é disparado para teclas que produzem e que não produzem um caractere.

Informações gerais
------------------

Especificação

DOM L3

Interface

KeyboardEvent (en-US)

Burbulha

Sim

Cancelável

Sim

Alvo

Document, Element

Ação Padrão

Variações: evento `keypress`; carrega sistema de composição de texto; eventos `blur` e `focus`; evento `DOMActivate`; outro evento

Propriedades
------------

| Propriedade | Tipo | Descrição |
| --- | --- | --- |
| `target` Somente leitura  | EventTarget | O alvo do evento (o alvo de nível mais alto na árvore DOM). |
| `type` Somente leitura  | DOMString | O tipo do evento. |
| `bubbles` Somente leitura  | Boolean | Se o evento normalmente burbulha ou não |
| `cancelable` Somente leitura  | Boolean | Se o evento é cancelável ou não |
| `view` Somente leitura  | WindowProxy | `document.defaultView`
 (`window` do documento)
  |
| `detail` Somente leitura  | `long` (`float`) | 0. |
| `target` Somente leitura  | EventTarget (elemento DOM) | 
 Elemento focado processando o evento, elemento raiz se nenhum elemento
 input adequado está focado.
  |
| `char` Somente leitura  | DOMString (string) | 
 O caractere correspondente à tecla. Se a tecla corresponde a um
 caractere imprimível, este valor é uma string Unicode não vazia,
 contendo o caractere. Se a tecla não tem uma representação imprimível, o
 valor é uma string vazia. Veja
 key names and char values (en-US)
 para detalhes.

**Nota:** Se a tecla for usada como uma macro que insere
 múltiplos caracteres, o valor deste atributo é toda a string, não
 apenas o primeiro caractere.
  |
| `key` Somente leitura  | DOMString (string) | 
 O valor da tecla pressionada. Se a tecla tem uma representação
 imprimível, o valor deste atributo é o mesmo do atributo
 `char`. Caso contrário, é uma das strings key especificadas
 em
 Key Values (en-US). Se a tecla não pode ser identificada, o valor do atributo é a string
 "Unidentified". Veja
 key names and char values (en-US)
 para detalhes. Somente Leitura.
  |
| `code` Somente leitura  | DOMString (string) | 
 Mantém uma string que identifica a tecla física sendo pressionada. O
 valor não é afetado pelo layout atual do teclado ou estado de
 modificador, portando uma tecla particular sempre retornará o mesmo
 valor.
  |
| `charCode` Somente leitura  | Unsigned long (int) | 
 O número de referência Unicode da tecla; este atributo é usado somente
 pelo evento
 `keypress` (en-US). Para teclas cujo atributo `char` contém múltiplos
 caracteres, este é o valor Unicode do primeiro caractere daquele
 atributo.

**Aviso:** Este atributo está obsoleto; você deve usar
 `char` no lugar, se disponível.
  |
| `keyCode` Somente leitura  | Unsigned long (int) | 
 Um código numérico, dependente do sistema e da implementação,
 identificando o valor não modificado da tecla pressionada. Este é
 usualmente o código decimal ASCII (RFC 20) ou código Windows
 1252 correspondente à tecla; veja
 Virtual key codes para uma lista de
 valores comuns. Se a tecla não pode ser identificada, este valor é 0.

**Aviso:** Este atributo está obsoleto; você deve usar
 `key` no lugar, se disponível.
  |
| `which` Somente leitura  | Unsigned long (int) | 
 Um código numérico, dependente do sistema e da implementação,
 identificando o valor não modificado da tecla pressionada; este é
 usualmente o mesmo que `keyCode`.

**Aviso:** Este atributo está obsoleto; você deve usar
 `key` no lugar, se disponível.
  |
| `location` Somente leitura  | long (float) | A localização da tecla no dispositivo. |
| `repeat` Somente leitura  | boolean | `true` se a tecla foi pressionada tempo suficiente para
 disparar repetição de tecla, `false` caso contrário.
  |
| `locale` Somente leitura  | string | 
 O código do idioma para o evento, se disponível; uma string vazia caso
 contrário.
  |
| `ctrlKey` Somente leitura  | boolean | `true` se a tecla control estava pressionada quando o evento
 foi disparado. `false` caso contrário.
  |
| `shiftKey` Somente leitura  | boolean | `true` se a tecla shift estava pressionada quando o evento
 foi disparado. `false` caso contrário.
  |
| `altKey` Somente leitura  | boolean | `true` se a tecla alt estava pressionada quando o evento foi
 disparado. `false` caso contrário.
  |
| `metaKey` Somente leitura  | boolean | `true` se a tecla meta estava pressionada quando o evento foi
 disparado. `false` caso contrário.
  |

`preventDefault()` do evento `keydown`
--------------------------------------

Iniciando com o Gecko 25, uma chamada para o método `preventDefault()` do evento `keydown` evita dispachar o evento `keypress` seguinte. Este é um comportamento válido para a especificação D3E e os principais navegadores web se comportam desta forma. Por outro lado, o Gecko 24 e anteriores dispachavam o evento `keypress` mesmo que o método `preventDefault()` do evento `keydown` anterior fosse chamado, embora o atributo `defaultPrevented` do evento `keypress` fosse `true` neste caso.

Eventos Relacionados
--------------------

* `keydown (en-US)`
* `keyup (en-US)`
* `keypress (en-US)`
* `input (en-US)`
Exemplo
-------
```

<!DOCTYPE html>
<html>
<head>
<script>

'use strict';

document.addEventListener('keydown', (event) => {
  const keyName = event.key;
  alert('keydown event\n\n' + 'key: ' + keyName);
});

</script>
</head>
<body>
</body>
</html>
```