興味深い問題を(私は、オーディオを再生するキーボードショートカットとして、[ESC]キーを使用していますので、これは重要です) - それはChromeを例えばIEで起こるではなく。ここで私がChromeとIEでテストした解決策があります(うまくいくようです)。
拡張版:
スクリプトのページヘッダー内:
'testinputは' 私たちが脱出不能にされて入力され
<script>
var buff; //Must have global scope
var input = document.getElementById("testinput"); //Defined here to save cpu (instead of on every key press).
function CheckPreBuff(e)
{
var ev = window.event ? event : e; //Get the event object for IE or FF
var unicode = (typeof(ev.keyCode) != "undefined")? ev.keyCode : ev.charCode;
if(unicode != 27) buff = input.value; //The 'escape' key has a unicode value of 27
else input.value = buff; //Only set the input contents when needed, so not to waste cpu.
}
</script>
。 testinputのHTMLは以下の通りです:
<input id="testinput" onkeypress="CheckPreBuff();" onkeyup="CheckPreBuff();" type="text"/>
お知らせ「の両方onkeyupの」と「onkeypressでは」が使用された - エスケープキーがある一方で「onkeypressでは」を使用すると、一時的にテキストボックスが空白に行く防ぐものの、技術的にのみ「onkeyupの」は、必要とされていますうつ病。 (ご希望の場合)を手動+エラー防止+サポートされる複数の入力縮小さ
ヘッダー内
スクリプト:
<script>
var buff = [];
function InitCPB(obj){if(typeof(obj)=="undefined")return;buff[0]=obj;buff[1]="";obj.onkeypress=CPB;obj.onkeyup=CPB;}
function CPB(e){if(typeof((buff[0]))=="undefined")return;var ev=window.event?event:e;(((typeof(ev.keyCode)!="undefined")?ev.keyCode:ev.charCode)!=27)?buff[1]=(buff[0]).value:(buff[0]).value=buff[1];}
</script>
testinputのhtmlタグ(idはもはや必要とされている):
どちらの方法も、次のキーが押される前にテキスト入力が含んでいたもののコピーを保持します。キープレースdが「エスケープ」、ユニコード27の場合は、前のテキスト入力がテキストボックスに戻されました(これは差別的ですので、キープレスごとにブラウザに負荷をかけすぎないようにします)。
2番目のバージョンでは、onFocus属性が上記のように設定されている限り(複数の要素が互いに干渉しない)、エスケープキーを無効にして同じページに複数のテキスト入力を行うことができます。 IEに心臓発作を与える誤った実装を防ぐために、それが定義されているオブジェクトをチェックします。
こちらがお役に立てば幸いです。
他にも問題があるようです。 escをキャンセルしても効果はありません。 – Mrchief
注:Firefox 5でこの問題が発生しました。 – philfreo
[この回答](http://stackoverflow.com/a/10275286/2131505)を参照してください。デフォルトアクションを防止するkeydownハンドラを追加すると、この問題がより良い方法で解決されます。 – Chen