Bindowanie klawiszy strzałek w JS/jQuery

Jak połączyć funkcję z klawiszami strzałek w lewo i prawo w Javascript i/lub jQuery? Spojrzałem na wtyczkę js-hotkey dla jQuery (owija wbudowaną funkcję bind, aby dodać argument do rozpoznawania konkretnych klawiszy), ale wydaje się, że nie obsługuje klawiszy strzałek.

Author: Stephen Ostermiller, 2009-09-10

16 answers

$(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)
});

Umieść własny kod dla klawiszy strzałek między odpowiednimi liniami case i break.

e.which jest znormalizowany przez jQuery, więc działa we wszystkich przeglądarkach. W przypadku czystego podejścia javascript zastąp dwie pierwsze linie przez:

document.onkeydown = function(e) {
    e = e || window.event;
    switch(e.which || e.keyCode) {


(edit 2017)
Jeśli masz ochotę, możesz użyć e.key zamiast e.which lub e.keyCode teraz. e.key staje się zalecanym standardem, pozwalającym na sprawdzenie przed ciągami: 'ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown'. Nowe przeglądarki wspierają go natywnie, sprawdź tutaj .

 492
Author: Sygmoral,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-22 23:59:34
$(document).keydown(function(e){
    if (e.keyCode == 37) { 
       alert( "left pressed" );
       return false;
    }
});

Kody znaków:

37 - left

38 - do góry

39 - prawo

40 - W Dół

 443
Author: Josh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-19 18:09:20

Możesz użyć kodu klawiszy strzałek (37, 38, 39 i 40 W Lewo, w górę, w prawo i w dół):

$('.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;
  }
});

Sprawdź powyższy przykład tutaj .

 102
Author: CMS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-09 23:49:21

Jest to trochę za późno, ale HotKeys ma bardzo duży błąd, który powoduje, że zdarzenia są wykonywane wiele razy, jeśli do elementu dołączysz więcej niż jeden hotkey. Wystarczy użyć zwykłego jQuery.

$(element).keydown(function(ev) {
    if(ev.which == $.ui.keyCode.DOWN) {
        // your code
        ev.preventDefault();
    }
});
 22
Author: mackstann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-28 20:14:09

Po prostu połączyłem najlepsze fragmenty z innych odpowiedzi:

$(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();
});
 16
Author: matt burns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-15 21:12:44

Możesz użyć KeyboardJS. Napisałem bibliotekę do takich zadań.

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'); });

Sprawdź bibliotekę tutaj = > http://robertwhurst.github.com/KeyboardJS/

 14
Author: Robert Hurst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-02 20:01:44

Zwięzłe rozwiązanie przy użyciu zwykłego Javascript (dzięki Sygmoral za sugerowane ulepszenia):

document.onkeydown = function(e) {
    switch (e.keyCode) {
        case 37:
            alert('left');
            break;
        case 39:
            alert('right');
            break;
    }
};

Zobacz też https://stackoverflow.com/a/17929007/1397061 .

 10
Author: 1'',
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:14

Czy na pewno jQuery.HotKeys nie obsługuje klawiszy strzałek? Miałem grzebał z ich demo przed i obserwowane lewo, prawo, w górę iw dół pracy, kiedy testowałem go w IE7, Firefox 3.5.2 i Google Chrome 2.0.172...

EDIT: pojawia się jquery.hotkeys został przeniesiony na Github: https://github.com/jeresig/jquery.hotkeys

 9
Author: Pandincus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-04 22:37:44

Zamiast return false; jak w powyższych przykładach, możesz użyć e.preventDefault();, który robi to samo, ale jest łatwiejszy do zrozumienia i odczytania.

 5
Author: Gaetan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-16 16:01:16

Przykład czystego js z przejściem w prawo lub w lewo

        window.addEventListener('keydown', function (e) {
            // go to the right
            if (e.keyCode == 39) {

            }
            // go to the left
            if (e.keyCode == 37) {

            }
        });
 4
Author: Vince Verhoeven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-18 11:57:53

Możesz użyć 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');
    }
});
 3
Author: Alessandro Pirovano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-11 03:21:11

Możesz sprawdzić, czy an {[1] } jest wciśnięte przez:

$(document).keydown(function(e){
    if (e.keyCode > 36 && e.keyCode < 41) { 
       alert( "arrowkey pressed" );
       return false;
    }
});
 2
Author: simple_human,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-18 03:03:41

Strzałka Prevent dostępna tylko dla dowolnego obiektu else SELECT, cóż właściwie nie mam tes na innym obiekcie LOL. ale może zatrzymać Zdarzenie strzałki na stronie i typie wprowadzania.

Już próbuję zablokować strzałkę w lewo i w prawo, aby zmienić wartość SELECT obiektu za pomocą "e. preventDefault()" lub "return false" NA zdarzeniu "kepress" "keydown" i "keyup", ale nadal zmienia wartość obiektu. ale wydarzenie nadal mówi, że strzałka została naciśnięta.

 0
Author: phoenixs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-16 04:43:57

Solidna biblioteka Javascript do przechwytywania wprowadzanych kombinacji klawiszy i klawiszy. Nie ma żadnych zależności.

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
    }
});
 0
Author: 小弟调调,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-12 13:50:20

Przyszedłem tutaj, szukając prostego sposobu, aby użytkownik, gdy koncentruje się na wejściu, za pomocą klawiszy strzałek do +1 lub -1 wejście numeryczne. Nigdy nie znalazłem dobrej odpowiedzi, ale zrobiłem następujący kod, który wydaje się działać świetnie-czyniąc tę witrynę teraz.

$("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);
    }
}); 
 0
Author: Scott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-04 15:11:30

Z kawą & 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()
 -1
Author: Philip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-31 14:12:54