keycode e charcode

Por que as pessoas escrevem declaração como

e.keyCode ? e.keyCode : e.charCode 

Algumas pessoas também usam e.which

Alguém poderia me explicar?

Lidar com events importantes consistentemente não é nada fácil.

Em primeiro lugar, existem dois tipos diferentes de códigos: códigos de teclado (um número que representa a tecla no teclado que o usuário pressionou) e códigos de caracteres (um número que representa um caractere Unicode). Você só pode obter com segurança códigos de caracteres no evento keypress . Não tente obter códigos de caracteres para events keyup e keydown .

Em segundo lugar, você obtém diferentes conjuntos de valores em um evento de keypress para o que você obtém em um evento keyup ou keydown .

Eu recomendo esta página como um recurso útil. Como resumo:

Se você estiver interessado em detectar um usuário digitando um caractere, use o evento keypress . IE bizarramente só armazena o código de caracteres em keyCode enquanto todos os outros navegadores armazenam em which . Alguns (mas não todos) navegadores também armazenam em charCode e / ou keyCode . Um exemplo de manipulador de pressionamento de tecla:

 function(evt) { evt = evt || window.event; var charCode = evt.which || evt.keyCode; var charStr = String.fromCharCode(charCode); alert(charStr); } 

Se você estiver interessado em detectar uma chave não imprimível (como uma tecla de cursor), use o evento keydown . Aqui keyCode é sempre a propriedade a ser usada. Observe que os events de chave têm as mesmas propriedades.

 function(evt) { evt = evt || window.event; var keyCode = evt.keyCode; // Check for left arrow key if (keyCode == 37) { alert("Left arrow"); } } 

É uma declaração condicional.

Se o navegador replace por e.keyCode, use e.keyCode else e.charCode.

É similar à

 var code = event.keyCode || event.charCode 

event.keyCode : Retorna o valor Unicode de uma chave sem caractere em um evento de pressionamento de tecla ou qualquer tecla em qualquer outro tipo de evento de teclado.

event.charCode : Retorna o valor Unicode de uma tecla de caractere pressionada durante um evento de pressionamento de tecla.

keyCode e que representam a tecla real do teclado pressionada na forma de um valor numérico. A razão pela qual ambos existem é que keyCode está disponível no Internet Explorer enquanto está disponível em navegadores W3C como o FireFox.

charCode é semelhante, mas neste caso você recupera o valor Unicode do caractere pressionado. Por exemplo, a letra “A”

A expressão JavaScript:

 var keyCode = e.keyCode ? e.keyCode : e.charCode; 

Essencialmente diz o seguinte:

Se a propriedade e.keyCode existir, defina a variável keyCode como seu valor. Caso contrário, defina keyCode variável como o valor da propriedade e.charCode.

Observe que recuperar as propriedades keyCode ou charCode geralmente envolve descobrir diferenças entre os modelos de events no IE e no W3C. Alguns implicam escrever código como o seguinte:

 /* get the event object: either window.event for IE or the parameter e for other browsers */ var evt = window.event ? window.event : e; /* get the numeric value of the key pressed: either event.keyCode for IE for e.which for other browsers */ var keyCode = evt.keyCode ? evt.keyCode : e.which; 

EDIT : Correções para minha explicação de charCode como por comentários de Tor Haugen.

Ok, aqui estão as explicações.

e.keyCode – usado para obter o número que representa a chave no teclado

e.charCode – um número que representa o caractere unicode da tecla no teclado

e.which – (específico do jQuery) é uma propriedade introduzida no jQuery (NÃO use em javascript simples)

Abaixo está o trecho de código para obter o keyCode e charCode

  

Exemplo ao vivo de Getting keyCode e charCode em JavaScript .

Eu (sendo eu mesmo) escrevi essa declaração porque queria detectar a chave que o usuário digitava no teclado em diferentes navegadores.

No firefox, por exemplo, os caracteres têm> 0 charCode e 0 keyCode, e chaves como setas e backspace têm> 0 keyCode e 0 charCode.

No entanto, usar essa declaração pode ser problemático, já que “colisões” são possíveis. Por exemplo, se você quiser distinguir entre as chaves Excluir e Período, isso não funcionará, já que a Exclusão possui keyCode = 46 e o ​​Período tem charCode = 46.

O event.which propriedade.que é adicionado ao usar o jQuery para evitar diferenças de navegador. Veja docs .

A propriedade which será indefinida se você não estiver usando o jQuery.