95 votes

JQuery ou JavaScript: Comment déterminer si la touche Maj enfoncée tout en cliquant sur le lien hypertexte de la balise d'ancrage

J'ai une balise d'ancrage qui appelle une fonction JavaScript.

Avec ou sans JQuery, comment déterminer si la touche Maj est enfoncée pendant le clic sur le lien?

Le code suivant ne fonctionne PAS car la pression sur la touche n'est déclenchée que si une "vraie touche" (pas la touche majuscule) est enfoncée. (J'espérais que ça se déclencherait si on n'appuyait que sur la touche Maj.)

 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
}
 

103voto

hluk Points 1819
    $(document).on('keyup keydown', function(e){shifted = e.shiftKey} );

77voto

Jsinh Points 1082

Il existe un code de clé équivalent pour chaque trait de clé en javascript. Vous pouvez l'utiliser et détecter si l'utilisateur a appuyé sur la touche Maj ou non. La liste est comme sous ::

 backspace   8
tab     9
enter   13
shift   16
ctrl    17
alt     18
pause/break     19
caps lock   20
escape  27
page up     33
page down   34
end     35
home    36
left arrow  37
up arrow    38
right arrow     39
down arrow  40
insert  45
delete  46
0   48
1   49
2   50
3   51
4   52
5   53
6   54
7   55
8   56
9   57
a   65
b   66
c   67
d   68
e   69
f   70
g   71
h   72
i   73
j   74
k   75
l   76
m   77
n   78
o   79
p   80
q   81
r   82
s   83
t   84
u   85
v   86
w   87
x   88
y   89
z   90
left window key     91
right window key    92
select key  93
numpad 0    96
numpad 1    97
numpad 2    98
numpad 3    99
numpad 4    100
numpad 5    101
numpad 6    102
numpad 7    103
numpad 8    104
numpad 9    105
multiply    106
add     107
subtract    109
decimal point   110
divide  111
f1  112
f2  113
f3  114
f4  115
f5  116
f6  117
f7  118
f8  119
f9  120
f10     121
f11     122
f12     123
num lock    144
scroll lock     145
semi-colon  186
equal sign  187
comma   188
dash    189
period  190
forward slash   191
grave accent    192
open bracket    219
back slash  220
close braket    221
single quote    222
 

C’est vrai que tous les navigateurs ne doivent pas appuyer sur la touche de l’événement.

 $(document).keydown(function (e) {
    if (e.keyCode == 16) {
        alert(e.which + " or Shift was pressed");
    }
});
 

26voto

Pointy Points 172438

Pour les événements de souris, je sais que dans Firefox au moins, la propriété "shiftKey" sur l'objet événement vous indiquera si la touche Maj est enfoncée. C'est documenté sur MSDN mais je ne l'ai pas essayé depuis toujours, donc je ne me souviens pas si IE le fait correctement.

Ainsi, vous devriez pouvoir vérifier "shiftKey" sur l'objet événement dans votre gestionnaire "click".

23voto

tonycoupland Points 1614

J'avais un problème similaire, j'essayais de capturer un «décalage + clic», mais comme j'utilisais un contrôle tiers avec un rappel plutôt que le gestionnaire standard click , je n'avais pas accès à l'objet événement. et ses e.shiftKey associés.

J'ai fini par gérer l'événement souris vers le bas pour enregistrer le décalage, puis l'utiliser plus tard dans mon rappel.

     var shiftHeld = false;
    $('#control').on('mousedown', function (e) { shiftHeld = e.shiftKey });
 

Publié juste au cas où quelqu'un d'autre finirait ici à chercher une solution à ce problème.

7voto

Chris Van Opstal Points 16961

L'événement keypress n'est pas déclenché par tous les navigateurs lorsque vous cliquez sur Maj ou Ctrl , mais heureusement, l'événement keydown est .

Si vous remplacez les keypress par keydown vous aurez peut-être plus de chance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X