Comment lier une fonction aux flèches gauche et droite en Javascript et/ou jQuery? J'ai regardé le plugin js-hotkey pour jQuery (enveloppe la fonction de liaison intégrée pour ajouter un argument permettant de reconnaître des clés spécifiques), mais cela ne semble pas prendre en charge les touches de direction.
_$(document).keydown(function(e) {
switch(e.which) {
case 37: // left
break;
case 38: // up
break;
case 39: // right
break;
case 40: // down
break;
default: return; // exit this handler for other keys
}
e.preventDefault(); // prevent the default action (scroll / move caret)
});
_
Placez votre code personnalisé pour les touches de direction entre les lignes case
et break
correspondantes.
e.which
est normalisé par jQuery, il fonctionne donc dans tous les navigateurs. Pour une approche purement javascript, remplacez les deux premières lignes par:
_document.onkeydown = function(e) {
e = e || window.event;
switch(e.which || e.keyCode) {
_
(édition 2017)
Si vous en avez envie, vous pouvez utiliser e.key
au lieu de _e.which
_ ou _e.keyCode
_ maintenant. _e.key
_ devient une norme recommandée, vous permettant de vérifier par rapport aux chaînes: _'ArrowLeft'
_, _'ArrowUp'
_, _'ArrowRight'
_, _'ArrowDown'
_. Les nouveaux navigateurs le supportent nativement, cochez ici .
$(document).keydown(function(e){
if (e.which == 37) {
alert("left pressed");
return false;
}
});
Codes de caractère:
37 - à gauche
38 - en haut
39 - droit
40 - en baisse
Vous pouvez utiliser le code clé des touches de direction (37, 38, 39 et 40 pour gauche, haut, droite et bas):
$('.selector').keydown(function (e) {
var arrow = { left: 37, up: 38, right: 39, down: 40 };
switch (e.which) {
case arrow.left:
//..
break;
case arrow.up:
//..
break;
case arrow.right:
//..
break;
case arrow.down:
//..
break;
}
});
Vérifiez l'exemple ci-dessus ici .
Ceci est un peu en retard, mais HotKeys a un bogue très important qui provoque l'exécution d'événements à plusieurs reprises si vous attachez plus d'un raccourci clavier à un élément. Utilisez simplement jQuery.
$(element).keydown(function(ev) {
if(ev.which == $.ui.keyCode.DOWN) {
// your code
ev.preventDefault();
}
});
J'ai simplement combiné les meilleurs éléments des autres réponses:
$(document).keydown(function(e){
switch(e.which) {
case $.ui.keyCode.LEFT:
// your code here
break;
case $.ui.keyCode.UP:
// your code here
break;
case $.ui.keyCode.RIGHT:
// your code here
break;
case $.ui.keyCode.DOWN:
// your code here
break;
default: return; // allow other keys to be handled
}
// prevent default action (eg. page moving up/down)
// but consider accessibility (eg. user may want to use keys to choose a radio button)
e.preventDefault();
});
Vous pouvez utiliser KeyboardJS. J'ai écrit la bibliothèque pour des tâches comme celle-ci.
KeyboardJS.on('up', function() { console.log('up'); });
KeyboardJS.on('down', function() { console.log('down'); });
KeyboardJS.on('left', function() { console.log('right'); });
KeyboardJS.on('right', function() { console.log('left'); });
Commander la bibliothèque ici => http://robertwhurst.github.com/KeyboardJS/
Une solution laconique en Javascript simple (merci à Sygmoral pour les améliorations suggérées):
document.onkeydown = function(e) {
switch (e.keyCode) {
case 37:
alert('left');
break;
case 39:
alert('right');
break;
}
};
Voir également https://stackoverflow.com/a/17929007/1397061 .
Etes-vous sûr que jQuery.HotKeys ne supporte pas les flèches? Je me suis amusé avec leur démo avant et ai observé à gauche, à droite, en haut et en bas de travailler lorsque je l'ai testé dans IE7, Firefox 3.5.2 et Google Chrome 2.0.172 ...
EDIT: jquery.hotkeys semble avoir été déplacé vers Github: https://github.com/jeresig/jquery.hotkeys
Au lieu d'utiliser return false;
comme dans les exemples ci-dessus, vous pouvez utiliser e.preventDefault();
qui fait la même chose mais est plus facile à comprendre et à lire.
Exemple de js pur avec aller à droite ou à gauche
window.addEventListener('keydown', function (e) {
// go to the right
if (e.keyCode == 39) {
}
// go to the left
if (e.keyCode == 37) {
}
});
Vous pouvez utiliser jQuery bind:
$(window).bind('keydown', function(e){
if (e.keyCode == 37) {
console.log('left');
} else if (e.keyCode == 38) {
console.log('up');
} else if (e.keyCode == 39) {
console.log('right');
} else if (e.keyCode == 40) {
console.log('down');
}
});
Vous pouvez vérifier si un arrow key
est appuyé par:
$(document).keydown(function(e){
if (e.keyCode > 36 && e.keyCode < 41) {
alert( "arrowkey pressed" );
return false;
}
});
Une bibliothèque Javascript robuste pour capturer les entrées au clavier et les combinaisons de touches entrées. Il n'a pas de dépendances.
http://jaywcjlove.github.io/hotkeys/
hotkeys('right,left,up,down', function(e, handler){
switch(handler.key){
case "right":console.log('right');break
case "left":console.log('left');break
case "up":console.log('up');break
case "down":console.log('down');break
}
});
Je suis venu ici à la recherche d'un moyen simple de permettre à l'utilisateur, lorsqu'il est concentré sur une entrée, d'utiliser les touches fléchées pour +1 ou -1 une entrée numérique. Je n'ai jamais trouvé de bonne réponse, mais le code suivant, qui semble fonctionner parfaitement, est désormais accessible à l'ensemble du site.
$("input").bind('keydown', function (e) {
if(e.keyCode == 40 && $.isNumeric($(this).val()) ) {
$(this).val(parseFloat($(this).val())-1.0);
} else if(e.keyCode == 38 && $.isNumeric($(this).val()) ) {
$(this).val(parseFloat($(this).val())+1.0);
}
});
empêche arrow disponible uniquement pour tout autre objet SELECT, eh bien, en fait, je n'ai pas testé un autre objet, LOL. mais il peut arrêter l'événement arrow sur la page et le type d'entrée.
j'essaie déjà de bloquer les flèches gauche et droite pour changer la valeur de l'objet SELECT en utilisant "e.preventDefault ()" ou "return false" sur les événements "kepress" "keydown" et "keyup", mais modifie toujours la valeur de l'objet. mais l'événement vous indique toujours que la flèche a été enfoncée.