2012-01-19 7 views
3

友人プロジェクトのような電卓を作っていたので、電卓を表示する完全なWebページです。キーボードからの入力については、他のすべてのキーが機能しました。また、電卓のように[del]コマンドを実行するためにバックスペースキーを使いたいと思っています。しかし、それは常にバックワード訪問サイトに行く。ここに私のコード:Googleのようにドキュメント内のバックスペースキー機能を無効にする

$(document).keypress(function(e){ 
var e=window.event || e 
var keyunicode=e.charCode || e.keyCode 
if(keyunicode>=40 && keyunicode<=57 && keyunicode!=44) 
{ 
    //call a function [worked] 
} 
else if(keyunicode==61) 
{ 
// call another function worked. 
} 
else if(keyunicode==8) 
{ 
e.preventDefault(); 
delete_last(); 

return false; 
} 

}); 

助けてください。私はクロムで試しました..

+2

ブラウザのキーボードショートカットは常に勝ちます。キーは、ブラウザが使用していないと判断した後にのみページに送信されます。これは設計によるものです。そうしないと、悪意のあるWebサイトがあらゆる種類のユーザーとのやり取りを乗り越える可能性があります。 –

+1

次に、F5をオーバーライドして、ウィンドウの代わりにiframeをリフレッシュする方法はありますか? :p –

+0

仮関数パラメータに変数を宣言している場合は、 'var e'を使用しないでください。変数を上書きする場合は、 'var'を省略してください。さらに、jQueryはすでにブラウザ固有の実装を扱い、イベントオブジェクトを正規化します。あなたの関数の最初の2行は 'var keyunicode = e.which'に置き換えることができます。 –

答えて

4

バックスペースをキャッチするには、​​リスナーを使用する必要があります。 keypressは、文字キーを意味します。​​は、機能キーに便利です。

$(document).keydown(function (e) { 
    if (e.which === 8) { 
    //your custom action here 
    return false; 
    } 
}); 
1

Chromeは一部のキーでkeypressイベントのみをサポートしていますが、バックスペースはこれに該当しません。詳細は、http://code.google.com/p/chromium/issues/detail?id=2606を参照してください。

​​に反応して、preventDefaultに電話して、Chromeでの効果を確認してください。

+0

私はそれを得た。 Googleのクロムはそれのために悪いです..もしクロームの提案があればお勧めします。 – progrrammer

+0

提案は 'keypress'の代わりに' keydown'を使うことです。私はChromeがそれに対して悪いとは言いません。主要イベントは標準化されておらず、ベンダーはさまざまな実装を選択しました。 Chromeの開発者は、Microsoftの方法にマッチしたかった(リンクされたバグのコメント5と11を参照)。この方法は[イベントの仕様ドラフト](http://www.w3.org/TR/DOM-Level-3-Events/#events-keyboard-event-order)でも提案されています。私の意見では、Mozillaの方法はより論理的であり、さらにダウンのような言葉の物理的な意味に基づいていれば良いだろう(草案と矛盾する繰り返しはない)。 –

関連する問題