2011-02-04 7 views
5

私はPrototypeを使用していて、window.documentでEvent.observeをやっています。プロトタイプは、Operaでイベントの問題を観察します

私はenter(keyCode 13)とalt + f(altKey & & keyCode = 70)をキャッチしています。

私のコードは、firefox、IE、およびchromeと非常に機能しています。 Opera no。 Enterキーはキャッチされますが、フォーカスがテキスト入力に含まれていない場合に限ります。 Alt + Fはまったく動作しません。

Prototypeでバグがあるのですか、それとも、Operaで何か「余分な」ことをする必要がありますか?あなたがのkeydown(またはからkeyup)とキー入力との間に差がある知っている必要があり、第二にhttp://unixpapa.com/js/key.html

:私が言ったように、私のコードが動作する他のすべてのブラウザ....まず

答えて

2

で、次は有用な資源であります。 keypressは典型的には修飾キーを許可しませんが、Operaのようないくつかの制御を許可します。ブラウザ間の一貫性を維持するためにkeydownを使用する方がよいでしょう。以下のためのattachEventを使って

Event.observe(document, 'keydown', function (e) { 
    alert(e.charCode+'::'+e.keyCode); 
}); 

または直接ネイティブメソッドを使用して(:

私はキーコードを取得===オペラ11.10で13 textboxに入力されているかどうかに関係なく、このようにプロトタイプを使用しているかどうかに関係なく、 IE):コントロールまたはファンクションキーと組み合わせない限り、それはクロムまたはIEで動作しませんが

if (document.addEventListener) { 
    document.addEventListener('keydown', function (e) { 
     alert(e.charCode+'::'+e.keyCode); 
    }, false); 
} 
else { // IE 
    document.attachEvent('onkeypress', function (e) { 
     alert(e.charCode+'::'+e.keyCode); 
    }); 
} 

しかし、ALTは、実際)(テキストボックスの内部に検出されません。これは、Windowsがaltを使用してアプリケーションのメニューバーにアクセスできるためです。

Ctrlキーを押しながらpreventDefault()を使用すると(ページの検索を行うctrl-fのようなデフォルトの動作を避けることができます)、ブラウザの動作をページで無効にしたくないユーザーが迷惑をかける可能性があります。

0

Alt-Fはメニューを有効にし、OperaはJavaScriptがこのキーを処理することを許可しません。

関連する問題