Como saber se o caps lock está ativado usando JavaScript?
Porém, uma ressalva: eu pesquisei no google e a melhor solução que encontrei foi anexar um onkeypress
evento a todas as entradas e, em seguida, verificar cada vez se a letra pressionada estava em maiúscula e, se estiver, verificar se o turno também foi pressionado. Caso contrário, o caps lock deve estar ativado. Parece realmente sujo e apenas ... um desperdício - certamente existe uma maneira melhor do que isso?
javascript
keyboard
capslock
nickf
fonte
fonte
input type=password
campos (semelhante a validação de endereços de e-mail parainput type=email
em cromo, etc.)Respostas:
Você pode tentar. Adicionado um exemplo de trabalho. Quando o foco está na entrada, ativar a tecla caps lock faz com que o led fique vermelho, caso contrário, verde. (Não testei no mac / linux)
NOTA: Ambas as versões estão funcionando para mim. Obrigado por contribuições construtivas nos comentários.
VERSÃO ANTIGA: https://jsbin.com/mahenes/edit?js,output
Além disso, aqui está uma versão modificada (alguém pode testar no mac e confirmar)
NOVA VERSÃO: https://jsbin.com/xiconuv/edit?js,output
NOVA VERSÃO:
VERSÃO ANTIGA:
função isCapslock (e) {
}
Para caracteres internacionais, verificação adicional pode ser adicionada para as seguintes chaves, conforme necessário. Você deve obter o intervalo do código de chave dos caracteres nos quais está interessado, pode estar usando uma matriz de mapeamento de teclas que conterá todas as chaves válidas de casos de uso que você está abordando ...
AZ maiúsculo ou 'Ä', 'Ö', 'Ü', aZ minúsculo ou 0-9 ou 'ä', 'ö', 'ü'
As teclas acima são apenas representação de amostra.
fonte
No jQuery,
Evite o erro, como a tecla backspace,
s.toLowerCase() !== s
é necessário.fonte
Você pode usar a
KeyboardEvent
para detectar várias chaves, incluindo o caps lock nos navegadores mais recentes.A
getModifierState
função fornecerá o estado para:Esta demonstração funciona em todos os principais navegadores, incluindo dispositivos móveis ( caniuse ).
fonte
Você pode detectar maiúsculas usando "é maiúscula na letra e nenhum turno pressionado" usando uma captura de tecla no documento. Mas é melhor ter certeza de que nenhum outro manipulador de teclas pressiona o balão de eventos antes que ele chegue ao manipulador no documento.
Você pode capturar o evento durante a fase de captura em navegadores compatíveis, mas parece um pouco inútil, pois não funcionará em todos os navegadores.
Não consigo pensar em outra maneira de realmente detectar o status do caps lock. A verificação é simples de qualquer maneira e se caracteres não detectáveis foram digitados, bem ... então a detecção não era necessária.
Havia um artigo sobre 24 maneiras neste último ano. Muito bom, mas não possui suporte a caracteres internacionais (use
toUpperCase()
para contornar isso).fonte
Muitas respostas existentes verificarão se o caps lock está ativado quando o shift não estiver pressionado, mas não o verificarão se você pressionar shift e ficar em minúsculas ou verificará isso, mas também não verificará se o caps lock está desativado ou verificará isso, mas considerará chaves não-alfa como 'desativadas'. Aqui está uma solução jQuery adaptada que exibirá um aviso se uma tecla alfa for pressionada com maiúsculas (shift ou sem turno), desativará o aviso se uma tecla alfa for pressionada sem maiúsculas, mas não ativará ou desativará o aviso quando números ou outras teclas são pressionadas.
fonte
No JQuery. Isso cobre a manipulação de eventos no Firefox e verificará caracteres inesperados em maiúsculas e minúsculas. Isso pressupõe um
<input id="password" type="password" name="whatever"/>
elemento e um elemento separado com o id 'capsLockWarning
' que possui o aviso que queremos mostrar (mas está oculto de outra forma).fonte
keypress
evento para fazer uso de diferentes caixas na entrada, porque ambaskeydown
ekeyup
sempre retornarão maiúsculas . Consequentemente, isso não irá disparar a chave capslock ... se você pretende combinar come.originalEvent.getModifierState('CapsLock')
As principais respostas aqui não funcionaram para mim por alguns motivos (código não comentado com um link inoperante e uma solução incompleta). Então, passei algumas horas testando todo mundo e obtendo o melhor que pude: aqui está o meu, incluindo jQuery e não-jQuery.
jQuery
Observe que o jQuery normaliza o objeto de evento, portanto algumas verificações estão ausentes. Também o reduzi a todos os campos de senha (já que esse é o maior motivo para precisar) e adicionei uma mensagem de aviso. Isso foi testado no Chrome, Mozilla, Opera e IE6-8. Estável e captura todos os estados do capslock, EXCETO quando números ou espaços são pressionados.
Sem jQuery
Algumas das outras soluções sem jQuery não possuíam fallbacks do IE. @Zappa corrigiu isso.
Nota: Confira as soluções de @Borgar, @Joe Liversedge e @Zappa e o plug-in desenvolvido por @Pavel Azanov, que ainda não tentei, mas é uma boa ideia. Se alguém souber como expandir o escopo além do A-Za-z, edite-o. Além disso, as versões jQuery desta pergunta são fechadas como duplicadas, por isso estou postando as duas aqui.
fonte
Usamos
getModifierState
para verificar se o caps lock é apenas um membro de um evento de mouse ou teclado, portanto não podemos usar umonfocus
. As duas maneiras mais comuns pelas quais o campo da senha ganhará foco é com um clique ou uma guia. Usamosonclick
para verificar se há um clique do mouse na entrada eonkeyup
para detectar uma guia do campo de entrada anterior. Se o campo de senha for o único campo da página e for focado automaticamente, o evento não ocorrerá até que a primeira tecla seja liberada, o que é razoável, mas não ideal. foco, mas, na maioria dos casos, essa solução funciona como um encanto.HTML
JS
https://codepen.io/anon/pen/KxJwjq
fonte
event.getModifierState("CapsLock").
Eu sei que esse é um tópico antigo, mas achei que eu iria responder caso isso ajudasse outras pessoas. Nenhuma das respostas para a pergunta parece funcionar no IE8. No entanto, encontrei esse código que funciona no IE8. (Havent testou qualquer coisa abaixo do IE8 ainda). Isso pode ser facilmente modificado para jQuery, se necessário.
E a função é chamada através do evento onkeypress, assim:
fonte
Esta é uma solução que, além de verificar o estado durante a gravação, também alterna a mensagem de aviso toda vez que a Caps Locktecla é pressionada (com algumas limitações).
Ele também suporta cartas não-inglês fora da faixa AZ, como ele verifica a cadeia de caracteres contra
toUpperCase()
etoLowerCase()
em vez de verificar contra o intervalo de caracteres.Observe que observar a alternância entre maiúsculas e minúsculas é útil apenas se conhecermos o estado da maiúscula antes de Caps Lockpressionar a tecla. O estado atual de caps lock é mantido com uma
caps
propriedade JavaScript no elemento de senha. Isso é definido na primeira vez que validamos o estado de maiúsculas e minúsculas quando o usuário pressiona uma letra que pode ser maiúscula ou minúscula. Se a janela perder o foco, não podemos mais observar a alternância entre maiúsculas e minúsculas, portanto, precisamos redefinir para um estado desconhecido.fonte
Recentemente, houve uma pergunta semelhante no hashcode.com, e eu criei um plugin jQuery para lidar com isso. Ele também suporta o reconhecimento de caps lock em números. (No layout de teclado alemão padrão, o caps lock afeta os números).
Você pode verificar a versão mais recente aqui: jquery.capsChecker
fonte
Para jQuery com twitter bootstrap
Marque as maiúsculas bloqueadas para os seguintes caracteres:
AZ maiúsculo ou 'Ä', 'Ö', 'Ü', '!', '"', '§', '$', '%', '&', '/', '(', ')' , '=', ':', ';', '*', '' '
aZ minúsculo ou 0-9 ou 'ä', 'ö', 'ü', '.', ',', '+', '#'
demonstração ao vivo no jsfiddle
fonte
Uma variável que mostra o estado de caps lock:
funciona em todos os navegadores => canIUse
fonte
Esta resposta baseada em jQuery postada por @ user110902 foi útil para mim. No entanto, melhorei um pouco para evitar uma falha mencionada no comentário de @B_N: falha ao detectar o CapsLock enquanto você pressiona Shift:
Assim, ele funcionará mesmo enquanto pressiona Shift.
fonte
Este código detecta caps lock, não importa o caso ou se a tecla Shift for pressionada:
fonte
Eu escrevi uma biblioteca chamada capsLock, que faz exatamente o que você deseja que ela faça.
Basta incluí-lo em suas páginas da web:
Em seguida, use-o da seguinte maneira:
Veja a demonstração: http://jsfiddle.net/3EXMd/
O status é atualizado quando você pressiona a tecla Caps Lock. Ele usa apenas o hack da tecla Shift para determinar o status correto da tecla Caps Lock. Inicialmente, o status é
false
. Então cuidado.fonte
Ainda outra versão, clara e simples, lida com capsLock deslocado, e não restrita a ascii, penso:
Edit: O sentido de capsLockOn foi revertido, doh, corrigido.
Editar # 2: depois de verificar isso um pouco mais, fiz algumas alterações, um código um pouco mais detalhado, infelizmente, mas ele lida com mais ações de maneira apropriada.
O uso de e.charCode em vez de e.keyCode e a verificação de valores 0 ignoram muitas pressionamentos de tecla sem caracteres, sem codificar nada específico para um determinado idioma ou conjunto de caracteres. Pelo que entendi, é um pouco menos compatível, portanto navegadores mais antigos, não convencionais ou móveis podem não se comportar conforme o esperado, mas vale a pena, de qualquer maneira, para a minha situação.
A verificação em uma lista de códigos de pontuação conhecidos evita que eles sejam vistos como falsos negativos, pois não são afetados pelo caps lock. Sem isso, o indicador caps lock fica oculto quando você digita algum desses caracteres de pontuação. Ao especificar um conjunto excluído, em vez de um incluído, ele deve ser mais compatível com caracteres estendidos. Esse é o bit mais feio e mais especial, e há algumas chances de que os idiomas não ocidentais tenham códigos de pontuação e / ou pontuação diferentes o suficiente para serem um problema, mas novamente vale a pena IMO, pelo menos para a minha situação.
fonte
Reagir
fonte
Com base na resposta de @joshuahedlund, uma vez que funcionou bem para mim.
Eu fiz do código uma função para que ele possa ser reutilizado e o vinculei ao corpo no meu caso. Ele pode ser vinculado ao campo de senha apenas se você preferir.
fonte
De Mottie e de Diego Vieira resposta acima é o que acabamos usando e deve ser a resposta aceita agora. No entanto, antes que eu percebesse, escrevi essa pequena função javascript que não depende de códigos de caracteres ...
Em seguida, chame-o em um manipulador de eventos como esse
capsLockIsOnKeyDown.capsLockIsOnKeyDown(event)
Mas, novamente, acabamos usando as respostas de @Mottie e @Diego Vieira
fonte
Neste código abaixo, será exibido um alerta quando o Caps travar e eles pressionam a tecla usando shift.
se retornarmos falso; o caractere atual não será anexado à página de texto.
fonte
experimente este código simples e fácil de entender
Este é o script
E o html
fonte
tente usar esse código.
Boa sorte :)
fonte
Você poderia usar este script . Ele deve funcionar bem no Windows, mesmo que a tecla Shift seja pressionada, mas não funcionará no Mac OS.
fonte
Aqui está um plug-in jquery personalizado, usando o jquery ui, composto de todas as boas idéias nesta página e aproveita o widget de dica de ferramenta. A mensagem caps lock é aplicada automaticamente a todas as caixas de senha e não requer alterações no seu html atual.
Código de plug-in personalizado ...
Aplicar a todos os elementos de senha ...
fonte
Código Javascript
Agora precisamos associar esse script usando HTML
fonte
é tarde, eu sei, mas isso pode ser útil para outra pessoa.
então aqui está a minha solução mais simples (com caracteres turcos);
fonte
Encontrei esta página e não gostei muito das soluções que encontrei, então descobri uma e a ofereço a todos vocês. Para mim, só importa se o caps lock está ativado se eu estiver digitando letras. Este código resolveu o problema para mim. É rápido e fácil e fornece uma variável capsIsOn para fazer referência sempre que você precisar.
fonte
Quando você digita, se o caplock estiver ativado, ele poderá converter automaticamente o caractere atual em minúsculas. Dessa forma, mesmo se o caplocks estiver ativado, ele não se comportará como na página atual. Para informar seus usuários, você pode exibir um texto informando que os caplocks estão ativados, mas que as entradas do formulário são convertidas.
fonte
Existe uma solução muito mais simples para detectar caps-lock:
fonte