jQuery - привязка клавиш для работы

Я знаю, что этот вопрос уже задавался и на него уже был дан ответ, и я уже нашел ответ, но у меня была проблема, по которой мне требовалась дополнительная информация, и, поскольку мой представитель слишком низок, я не могу комментировать соответствующий ответ. просить об этом!

Я использую ответ sygmoral для этот пост, который должен быть вторым ответом вниз страница. Я использую две функции для управления ползунком изображения: одну для скольжения влево и одну для скольжения вправо. При нажатии экранных кнопок курсором мыши каждая функция работает отлично, но при использовании функции sygmoral для нажатия клавиш только одна из клавиш со стрелками влево/вправо запускает функцию должным образом...

Код функции нажатия клавиши выглядит следующим образом:

    $(document).keydown(function(e){
        switch(e.which) {
            case 37:
            slideLeft();

            case 39:
            slideRight();

            default: return;                
        }
        e.preventDefault();
    });

case 39 работает как надо. В случае 37 вызывается функция slideLeft(), и изображение скользит влево, но затем сразу же возвращается вправо. Если я поменяю местами случаи 39 и 37, произойдет обратное. В принципе, только второй случай будет работать правильно.

Может ли кто-нибудь предложить мне предложение относительно того, почему это может быть?


person Mike Chivington    schedule 25.05.2014    source источник


Ответы (2)


вам не хватает ключевого слова break; в каждой ветке оператора switch, поэтому, если вы нажмете стрелку влево, вы попадете в случай 37 - slideLeft() обрабатывается, а затем и остальная часть кода (slideRight();return;)

см. документацию switch на MDN .

вот что вам нужно:

$(document).keydown(function(e){
    switch(e.which) {
        case 37:
            slideLeft();
            break;
        case 39:
            slideRight();
            break; // isn't needed in your case
        default:
            return;                
    }
    e.preventDefault();
});
person mychalvlcek    schedule 25.05.2014
comment
Отлично, спасибо :) Так просто! Очевидно ли, что я никогда раньше не использовал switch()? - person Mike Chivington; 25.05.2014

Вам не хватает break; после вызовов функции, в каждом случае...

Например, вместо

case 37:
  slideLeft();

Вы должны иметь

case 37:
  slideLeft();
  break;

Дополнительные сведения об операторах switch в JavaScript см. на странице http://www.w3schools.com/js/js_switch.asp

person hakazvaka    schedule 25.05.2014
comment
Спасибо чувак, хороший ответ. Хотя тебя только что натолкнули на пост! - person Mike Chivington; 25.05.2014
comment
Не совсем, я написал в 10:46:26, а не в 10:50:37. - person hakazvaka; 25.05.2014
comment
Так ты был! Извините, я не знал, что вы можете видеть точное время. Я просто предположил, что первый ответ в списке был более старым. Мои извинения. - person Mike Chivington; 26.05.2014