Comment lier une fonction aux touches fléchées gauche et droite dans Javascript et/ou jQuery? J'ai regardé le plugin js-hotkey pour jQuery (enveloppe la fonction intégrée de liaison pour ajouter un argument pour reconnaître des touches spécifiques), mais il ne semble pas supporter les touches fléchées.Touches fléchées de liaison dans JS/jQuery
Répondre
$(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)
});
Mettez votre code personnalisé pour les touches fléchées entre les case
et break
lignes correspondantes.
e.which
est normalisé par jQuery, donc il fonctionne dans tous les navigateurs. Pour une approche purement javascript, remplacer les deux premières lignes avec:
document.onkeydown = function(e) {
e = e || window.event;
switch(e.which || e.keyCode) {
(modifier 2017)
Si vous vous sentez de fantaisie, 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, check here.
$(document).keydown(function(e){
if (e.keyCode == 37) {
alert("left pressed");
return false;
}
});
codes de caractères:
37 - left
38 - up
39 - right
40 - down
Y at-il pour but le retour? –
Il arrête tout autre événement de clavier touché. –
Oh c'est vrai ... Je l'ai juste écrit avec un interrupteur et casse. –
Vous pouvez utiliser le code d'activation des touches fléchées (37, 38, 39 et 40 pour la gauche, en haut, à droite et en bas):
$('.selector').keydown(function (e) {
var keyCode = e.keyCode || e.which,
arrow = {left: 37, up: 38, right: 39, down: 40 };
switch (keyCode) {
case arrow.left:
//..
break;
case arrow.up:
//..
break;
case arrow.right:
//..
break;
case arrow.down:
//..
break;
}
});
Vérifiez l'exemple ci-dessus here.
Je ne suis pas sûr de votre utilisation du || opérateur dans la ligne 2. Une valeur autre que zéro ou une implémentation différente de zéro n'est-elle pas spécifique et non garantie? Je voudrais utiliser quelque chose de plus comme: var keyCode = (e.keyCode? E.keyCode: e.which); +1 pour l'utilisation de l'objet fléché pour donner les noms lisibles des cas. – Mnebuerquo
Si vous utilisez jQuery, vous n'avez pas besoin de tester pour ce qui suit: 'L'événement.que la propriété normalise event.keyCode et event.charCode' - http://api.jquery.com/event.which/ – JCM
I ' m essayant de placer un écouteur d'événement clé sur une table, mais cela ne fonctionnerait pas. Existe-t-il un nombre limité de types de sélecteurs prenant en charge les écouteurs d'événements clés? –
Etes-vous sûr que jQuery.HotKeys ne prend pas en charge les touches fléchées? J'ai déjoué leur démo avant et j'ai observé gauche, droite, haut et bas fonctionnant quand je l'ai testé dans IE7, Firefox 3.5.2, et Google Chrome 2.0.172 ...
EDIT: It Apparaît jquery.hotkeys a été déplacé vers Github: https://github.com/jeresig/jquery.hotkeys
Je lisais où il était dit qu'il était basé sur une autre bibliothèque, et supposait que la liste des clés supportées s'appliquait toujours. –
Ceci est un peu en retard, mais HotKeys a un bogue très important qui provoque l'exécution des événements plusieurs fois si vous attachez plus d'un raccourci à un élément. Utilisez simplement jQuery.
$(element).keydown(function(ev) {
if(ev.which == $.ui.keyCode.DOWN) {
// your code
ev.preventDefault();
}
});
+1 pour l'utilisation de l'objet code-clé ui. Beaucoup plus facile à comprendre que 37, 38, 39 ou 40. Je ne sais pas pourquoi la meilleure réponse utilise e.keyCode lorsque la documentation de jQuery stipule explicitement d'utiliser e.which pour tenir compte des différences de navigateur. J'espère que cette réponse sera mieux reconnue pour bien faire les choses. –
L'utilisation de $ .ui.keyCode.DOWN à chaque appui sur une touche est beaucoup plus lente que l'utilisation du numéro. Ajoutez simplement un commentaire si vous êtes préoccupé par la clarté, d'autant plus qu'il doit être exécuté à chaque fois que vous appuyez sur une touche. –
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.
'return false;' et 'e.preventDefault();' ne sont pas exactement identiques. Voir http://stackoverflow.com/a/1357151/607874 –
J'ai simplement combiné les meilleurs morceaux 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();
});
D'où vient "ui"? Obtenir "TypeError: $ .ui est indéfini" EDIT - Il me manquait l'interface utilisateur JQuery. J'ai chargé ça - plus d'erreur. –
Il semble également utiliser l'interface utilisateur jQuery qui doit avoir cette énumération. Je ne voudrais pas inclure l'interface utilisateur jQuery juste pour cela, btw. –
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 utilisant simplement Javascript (grâce à des améliorations proposées Sygmoral):
document.onkeydown = function(e) {
switch (e.keyCode) {
case 37:
alert('left');
break;
case 39:
alert('right');
break;
}
};
Voir aussi https://stackoverflow.com/a/17929007/1397061.
Probablement aussi dignes de liaison via 'document.addEventListener ('keydown', myFunction);' – nathanbirrell
Vous pouvez utiliser bind jQuery:
$(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');
}
});
Avec café & Jquery
$(document).on 'keydown', (e) ->
switch e.which
when 37 then console.log('left key')
when 38 then console.log('up key')
when 39 then console.log('right key')
when 40 then console.log('down key')
e.preventDefault()
Vous pouvez vérifier wether un arrow key
est pressé par:
$(document).keydown(function(e){
if (e.keyCode > 36 && e.keyCode < 41) {
alert("arrowkey pressed");
return false;
}
});
empêchent la flèche uniquement disponible pour les un autre objet SELECT, eh bien en fait je n'ai pas tes sur un autre objet LOL. mais il peut arrêter l'événement de flèche 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 cela change encore la valeur de l'objet. mais l'événement vous dit encore que la flèche a été pressée.
Une bibliothèque Javascript robuste pour saisir 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 laisser l'utilisateur, lorsqu'elle se concentre sur une entrée, utilisez les touches fléchées pour +1 ou -1 une entrée numérique. Je n'ai jamais trouvé une bonne réponse mais j'ai fait le code suivant qui semble bien fonctionner - en faire tout le site maintenant.
$("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);
}
});
Exemple de js pur à 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) {
}
});
- 1. Touches fléchées avec NSTableView
- 2. C# et touches fléchées
- 3. Codes-clés des touches fléchées
- 4. Naviguer avec les touches fléchées
- 5. Utilisez les touches fléchées C++?
- 6. ListBox + WrapPanel Navigation par touches fléchées
- 7. Les flèches obtenant les touches fléchées
- 8. Quelles sont les valeurs numériques des touches F (F [1-12]) et des touches fléchées?
- 9. Création d'une liaison de touches ctrl + tab dans PuTTY
- 10. comment puis-je déplacer le curseur en mode insertion dans viemu (sans utiliser les touches fléchées)?
- 11. Les touches fléchées et le changement de focus du contrôle accrochent l'application
- 12. Utilisation de Eclipse TableViewer, comment naviguer et modifier des cellules avec les touches fléchées?
- 13. Est-il possible d'empêcher le défilement de documents lorsque les touches fléchées sont enfoncées?
- 14. Définition des touches de raccourci dans Textmate
- 15. Arrêter les touches fléchées pour faire défiler les onglets sur TabControl C# Winform
- 16. Comment puis-je envoyer des touches fléchées à un processus en utilisant Expect.pm
- 17. détecter deux touches simultanées dans pyglet (python)
- 18. Touches de suivi dans UITableView
- 19. Comment mettre en évidence la sélection dans la liaison de touches Emacs d'Eclipse?
- 20. C# - Menu contextuel La bande a un comportement de défilement lorsque l'utilisateur appuie sur les touches fléchées
- 21. Touches dans UIScrollView
- 22. Nombre de touches
- 23. Combinaisons de touches dans C# winforms application
- 24. Emacs: fonction qui écrit un code elisp qui ajoute une liaison de touches spécifiée par l'utilisateur
- 25. Conflits de liaisons de touches Eclipse
- 26. Pourquoi les touches fléchées, tabulation, etc. ne sont-elles pas reçues par le gestionnaire onkeypress du champ de saisie dans certains navigateurs?
- 27. Afficher la rotation dans les touches Déplacé
- 28. ManyToMany dans Hibernate sans touches composées
- 29. obtenir des touches dans API UIResponder
- 30. Touches sur UILabel
De loin la meilleure réponse. Utilise 'e.which' comme jQuery recommande pour cross-browser, utilise' e.preventDefault() 'au lieu de' return false' ('return false' sur un gestionnaire d'événement jQuery déclenche à la fois' e.preventDefault() 'et' e .stopPropagation() ', dont la seconde va provoquer l'échec des événements ajoutés ultérieurement car l'événement ne se propagera pas à eux), et à la fin du commutateur, retournera * sans * appeler' e.preventDefault () 'si c'est n'importe quelle autre clé que celles qui sont recherchées pour ne pas gêner l'utilisation d'autres clés, et au lieu de' $ .ui.keyCode.DOWN', elle se compare aux nombres (beaucoup plus rapidement). –
Où trouvez-vous ces codes clés? –
Nathan: il semble que tous les keycodes ne sont pas cohérents parmi les navigateurs, mais les touches fléchées sont parmi celles qui le sont. Voir ici: http://stackoverflow.com/questions/5603195/full-list-of-javascript-keycodes – Sygmoral