Eu tenho uma tag âncora que chama uma função JavaScript.
Com ou sem JQuery, como posso determinar se a tecla shift está pressionada enquanto o link é clicado?
O código a seguir NÃO funciona porque o pressionamento de tecla só é acionado se uma "tecla real" (não a tecla shift) for pressionada. (Eu esperava que ele disparasse se apenas a tecla shift fosse pressionada.)
var shifted = false;
$(function() {
$(document).keypress(function(e) {
shifted = e.shiftKey;
alert('shiftkey='+e.shiftkey);
});
$(document).keyup(function(e) {
shifted = false;
});
}
...
function myfunction() {
//shift is always false b/c keypress not fired above
}
javascript
jquery
Pete Alvin
fonte
fonte
shiftkey
vez deshiftKey
:-)shift+click
, usefilter-altered-clicks
Respostas:
fonte
shift
desde o retorno da funçãofalse
. Eu precisava permitir explicitamentereturn true
crtl + r, ctrl + s, ctrl + p etc.Aqui está o código de cada tecla em JavaScript. Você pode usar isso e detectar se o usuário pressionou a tecla Shift.
Nem todos os navegadores lidam bem com o evento keypress, então use o evento key up ou key down, assim:
fonte
event.key
lugar! Ele fornecerá o caractere diretamente, por exemplo: "a", "1", "LeftArrow"document.addEventListener("keydown", function(e){ console.log(e.which); });
Para eventos de mouse, sei que, no Firefox, pelo menos a propriedade "shiftKey" no objeto de evento informará se a tecla shift está pressionada. Está documentado no MSDN, mas não o experimento há muito tempo, então não me lembro se o IE faz isso direito.
Portanto, você deve ser capaz de verificar se há "shiftKey" no objeto de evento em seu manipulador de "clique".
fonte
Tive um problema semelhante ao tentar capturar um 'shift + clique', mas como estava usando um controle de terceiros com um retorno de chamada em vez do
click
manipulador padrão , não tive acesso ao objeto de evento e seus associadose.shiftKey
.Acabei manipulando o evento do mouse para baixo para registrar a mudança e, em seguida, usando-o mais tarde em meu retorno de chamada.
Postado para o caso de alguém vir aqui em busca de uma solução para esse problema.
fonte
O
keypress
evento não é disparado por todos os navegadores quando você clica em shiftou ctrl, mas felizmente okeydown
evento é .Se você trocar o
keypress
com,keydown
talvez tenha mais sorte.fonte
Usei um método para testar se alguma tecla específica foi pressionada, armazenando os códigos de tecla pressionados atualmente em uma matriz:
Aqui está o jsfiddle
fonte
A excelente biblioteca JavaScript KeyboardJS lida com todos os tipos de pressionamento de tecla, incluindo a tecla SHIFT. Ele ainda permite especificar combinações de teclas, como primeiro pressionar CTRL + x e, em seguida, a.
Se você quiser uma versão simples, vá para a resposta de @tonycoupland ):
fonte
Isso funciona muito bem para mim:
fonte
Para verificar se a tecla shift é pressionada enquanto clica com o mouse , existe uma propriedade exata no objeto de evento de clique : shiftKey (e também para ctrl e alt e meta key): https://www.w3schools.com/jsref/event_shiftkey .asp
Então, usando jQuery:
fonte
Uma abordagem mais modular mais a capacidade de manter seu
this
escopo nos ouvintes:fonte
Se alguém está procurando detectar uma determinada tecla e precisa saber o status dos "modificadores" (como são chamados em Java), ou seja, as teclas Shift, Alt e Control, você pode fazer algo assim, que responde à
keydown
tecla F9, mas apenas se nenhuma das teclas Shift, Alt ou Control estiver pressionada no momento.fonte
demo
fonte