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 que le lien est cliqué?
Le code suivant ne fonctionne PAS car la pression de touche n'est déclenchée que si une «touche réelle» (pas la touche Maj) est enfoncée. (J'espérais qu'il 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
}
javascript
jquery
Pete Alvin
la source
la source
shiftkey
au lieu deshiftKey
:-)shift+click
, utilisezfilter-altered-clicks
Réponses:
la source
shift
depuis le retour de la fonctionfalse
. J'avais besoin explicitementreturn true
d'autoriser crtl + r, ctrl + s, ctrl + p etc.Voici le code de chaque touche en JavaScript. Vous pouvez l'utiliser et détecter si l'utilisateur a appuyé sur la touche Maj.
Tous les navigateurs ne gèrent pas bien l'événement keypress, utilisez donc l'événement key up ou key down, comme ceci:
la source
event.key
plutôt! Il vous donnera le caractère directement, ex: "a", "1", "LeftArrow"document.addEventListener("keydown", function(e){ console.log(e.which); });
Pour les événements de souris, je sais que dans Firefox au moins la propriété "shiftKey" sur l'objet événement vous dira si la touche Maj est enfoncée. Il est documenté chez MSDN mais je ne l'ai pas essayé depuis toujours, donc je ne me souviens pas si IE le fait correctement.
Ainsi, vous devriez être en mesure de vérifier "shiftKey" sur l'objet événement dans votre gestionnaire "click".
la source
J'ai eu un problème similaire, en essayant de capturer un 'shift + click' mais comme j'utilisais un contrôle tiers avec un rappel plutôt que le
click
gestionnaire standard , je n'avais pas accès à l'objet événement et à son associée.shiftKey
.J'ai fini par gérer l'événement mouse down pour enregistrer le décalage, puis l'utiliser plus tard dans mon rappel.
Publié juste au cas où quelqu'un d'autre finirait ici à la recherche d'une solution à ce problème.
la source
L'
keypress
événement n'est pas déclenché par tous les navigateurs lorsque vous cliquez sur shiftou ctrl, mais heureusement, l'keydown
événement est .Si vous changez de
keypress
avec,keydown
vous aurez peut-être plus de chance.la source
J'ai utilisé une méthode pour tester si une touche spécifique est enfoncée en stockant les codes de touche actuellement enfoncés dans un tableau:
Voici le jsfiddle
la source
L'excellente bibliothèque JavaScript KeyboardJS gère tous les types d'appuis sur les touches, y compris la touche SHIFT. Il permet même de spécifier des combinaisons de touches telles que d'appuyer d'abord sur CTRL + x puis sur a.
Si vous voulez une version simple, dirigez-vous vers la réponse de @tonycoupland ):
la source
Cela fonctionne très bien pour moi:
la source
Pour vérifier si la touche Maj est enfoncée tout en cliquant avec la souris , il existe une propriété exacte dans l'objet d'événement de clic : shiftKey (et aussi pour ctrl et alt et meta key): https://www.w3schools.com/jsref/event_shiftkey .aspic
Donc, en utilisant jQuery:
la source
Une approche plus modulaire et la possibilité de garder votre
this
portée dans les auditeurs:la source
Si quelqu'un cherche à détecter une clé donnée et a besoin de connaître l'état des "modificateurs" (comme on les appelle en Java), c'est-à-dire les touches Shift, Alt et Control, vous pouvez faire quelque chose comme ça, qui répond à la
keydown
touche F9, mais seulement si aucune des touches Shift, Alt ou Control n'est actuellement enfoncée.la source
démo
la source