2012-04-05 15 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 ids、隠された入力フィールドなど)に焦点を当てようとしましたが、これらのどれも私の状況では機能しないようです。 – unclesol

0

documentは、キーイベントを付加するのに適しています。また、keyCodeは、すべての主要ブラウザで、​​とkeyupイベントの正しいプロパティであるため、whichで回り込む必要はありません。 IFRAME内から親文書に取り付けるための

、あなたのコメントの一つが示唆、あなたが(直接の親ドキュメントのウィンドウのため)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'); 
    } 
}; 
関連する問題