--- title: GlobalEventHandlers.onkeypress slug: Web/API/GlobalEventHandlers/onkeypress tags: - API - Event Handler - GlobalEventHandlers - HTML DOM - Property - Reference translation_of: Web/API/GlobalEventHandlers/onkeypress ---
{{domxref("GlobalEventHandlers")}} ミックスインの onkeypress プロパティは、{{event("onkeypress")}} イベントを処理する {{event("Event_handlers", "event handler")}} です。
keypress イベントはユーザーがキーボード上のキーを押下した時に発生すべきですが、実際のブラウザーでは特定のキーについて keypress イベントを発生させません。
onkeypress イベントハンドラーは非推奨です。代わりに {{domxref("GlobalEventHandlers.onkeydown", "onkeydown")}} を使用してください。
target.onkeypress = functionRef;
functionRef は関数名または 関数式 です。この関数は、{{domxref("KeyboardEvent")}} オブジェクトとその 1 個の引数を受け取ります。
この例は、{{HtmlElement("input")}} 要素内でキーを押すたびに、そのキーの {{domxref("KeyboardEvent.code")}} 値をログ出力します。
<input> <p id="log"></p>
const input = document.querySelector('input');
const log = document.getElementById('log');
input.onkeypress = logKey;
function logKey(e) {
log.textContent += ` ${e.code}`;
}
{{EmbedLiveSample("Basic_example", 700, 200)}}
この例は、フォームフィールドに入力された文字を 正規表現 を利用して絞り込みます。
<label>Enter numbers only: <input> </label>
function numbersOnly(event) {
return event.charCode === 0 || /\d/.test(String.fromCharCode(event.charCode));
}
const input = document.querySelector('input');
input.onkeypress = numbersOnly;
// 貼り付けを抑止 (貼り付けられたコンテンツに数字以外の文字が含まれる可能性があるため)
input.onpaste = event => false;
{{EmbedLiveSample("Filter_keys_with_a_regular_expression")}}
次の JavaScript 関数は、ユーザーがページ上のどこかに "exit" と入力した後に何かをします。
/* Type the word "exit" in any point of your page... */
(function () {
const sSecret = /* Choose your hidden word...: */ "exit";
let nOffset = 0;
document.onkeypress = function(oPEvt) {
let oEvent = oPEvt || window.event,
nChr = oEvent.charCode,
sNodeType = oEvent.target.nodeName.toUpperCase();
if (nChr === 0 ||
oEvent.target.contentEditable.toUpperCase() === "TRUE" ||
sNodeType === "TEXTAREA" ||
sNodeType === "INPUT" && oEvent.target.type.toUpperCase() === "TEXT") {
return true;
}
if (nChr !== sSecret.charCodeAt(nOffset)) {
nOffset = nChr === sSecret.charCodeAt(0) ? 1 : 0;
} else if (nOffset < sSecret.length - 1) {
nOffset++;
} else {
nOffset = 0;
/* Do something here... */
alert("Yesss!!!");
location.assign("https://developer.mozilla.org/");
}
return true;
};
})();
注記: 合言葉の入力を捕捉する完全なフレームワークは、GitHub 上にあります。
| 仕様書 | 策定状況 | 備考 |
|---|---|---|
| {{SpecName('HTML WHATWG','webappapis.html#handler-onkeypress','onkeypress')}} | {{Spec2('HTML WHATWG')}} |
{{Compat("api.GlobalEventHandlers.onkeypress")}}
keypress イベントは non-printable keys に対して発生しなくなりました (この Firefox 65 での実装について {{bug(968056)}} を参照)。ただし、Enter キーおよび Shift + Enter、Ctrl + Enter キーの組み合わせを除きます (ブラウザー間の互換性を維持するため)。