2012-04-05 2 views
0

У меня есть страница в модальном окне, где я показываю слайд-шоу. Предназначенная аудитория предназначена для пользователей планшетов, и они перемещаются по экрану, прокручивая справа налево или влево вправо, чтобы увидеть следующий или предыдущий слайд. Все это прекрасно работает.JavaScript keyDown Не работает

Однако, если кто-то просматривает страницу с помощью компьютера, я бы хотел, чтобы они могли перемещаться с помощью клавиш со стрелками на клавиатуре. Я могу обнаружить нажатие клавиши, но только после того, как пользователь щелкнул внутри модального окна. Мне бы очень хотелось, чтобы пользователь не должен был щелкнуть где-либо до появления навигации по клавиатуре. Кажется, не имеет значения, что я пытаюсь, это всегда проблема.

Обратите внимание, что это модальное окно, оно выводит его содержимое с помощью iFrame.

Вот код. Я подтвердил, что он запускается при загрузке страницы, а функция pageTurn работает с другими событиями:

document.onkeydown = function(e){ 
    if (e == null) { 
     keycode = event.keyCode; 
    } else { 
     keycode = e.which; 
    } 
    if(keycode == 37){ 
     pageTurn('right'); 
    } else if(keycode == 39){ 
     pageTurn('left'); 
    } 
}; 

ответ

4

Попробуйте установить событие document.documentElement вместо просто document.

Если это не удается, попробуйте добавить document.body.focus(), чтобы убедиться, что документ готов для ввода клавиатуры.

EDIT: Внутри iFrame событие должно быть привязано к top.document.documentElement.

+0

Ни один из них не сделал ничего другого. Возможно, потому что это модальное окно с содержимым iFramed, я должен каким-то образом получить доступ к родительскому объекту? Я не уверен. Я попробовал parent.focus(), но ничего не сделал. – unclesol

+1

Ах, если это iframe, то это немного сложнее. Вам нужно прикрепить событие к 'top.document.documentElement'. –

+0

Да! Это сделал трюк. Я считаю этот ответ правильным. Обновите свой ответ, чтобы включить сценарий iFrame. Большое спасибо! – unclesol

-2

Возможно, ваши коды клавиш неправильные. Вот страница, где показаны коды вашего браузера: http://asquare.net/javascript/tests/KeyCode.html

Если коды верны, сравните код обработки событий на этой странице с вашей версией.

+0

Ну, я знал, что коды клавиш были правильными, поскольку они работали, когда я щелкнул по экрану. То, что я считаю интересным в обработке событий в примере, который вы установили, заключается в том, что он начинается с установки фокуса на текстовое поле. Как я уже сказал, нажатие на экран действительно приводит к тому, что мой код работает, поэтому проблема, похоже, как бы фокусируется, но у меня нет текстового окна, которое я хочу, чтобы пользователь вводил текст, я хочу использовать стрелки для навигации ,Я попытался привлечь внимание к элементам на странице (div id, скрытые поля ввода и т. Д.), Но ни один из них, похоже, не работает в моих обстоятельствах. – unclesol

0

document подходит для хранения ключевых событий. Кроме того, keyCode - это правильное свойство во всех основных браузерах для keydown и keyup событий, поэтому нет необходимости возиться с which.

Для крепления родительского документа из в плавающем фрейме, как один из ваших комментариев предполагает, что вам нужно использовать parent (для окна Материнского документа) или top (окно самого внешнего документа):

parent.document.onkeydown = function(e) { 
    e = e || parent.event; 
    var keyCode = e.keyCode; 
    if (keyCode == 37) { 
     pageTurn('right'); 
    } else if (keyCode == 39) { 
     pageTurn('left'); 
    } 
};