テキストイベント について
画面からキーボードでテキスト入力する時のイベントについて調べて試してみます。
キーボード入力関連のイベントは複数ありますが、今回は以下のものを試してみます。
keydown keyup textInput input keypress
上記のイベントのうち、テキスト入力内容を取得する際に、各イベントごとに
取得できる内容が異なるので注意が必要です。
それぞれのイベントはキーボードで1文字入力したタイミングで、
引数のイベントターゲットに対して、1回の入力されたキーボード情報が取得ができます。
keypressについては、Unicodeの符号位置(数値)を取得します。
イベントターゲットから取得したkeyCodeは、入力文字列に対応したコード番号が取得されます。
コードではなく、文字列で取得する場合は、keyCodeをもとに、
String.fromCharCode()とすることで、文字列に変換することができます。
(firefoxではkeyCodeではなく、charCodeを使うと文字列に変換できます)
下記に簡単なサンプルを用意しました。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>テストHTML</title> </head> <body> テキスト入力テスト <input type="text" id="test1" name="test1"> <div>取得結果keypress</div> <div id="keypress_result"></div> <div>取得結果textInput</div> <div id="keypress_result"></div> <div>取得結果input</div> <div id="input_result"></div> <div>取得結果keydown_result</div> <div id="keydown_result"></div> <div>取得結果keyup_result</div> <div id="keyup_result"></div> <script type="text/javascript"> // DOM要素を取得 let test1_text = document.getElementById("test1"); // keypressのイベントハンドラを登録 test1_text.addEventListener('keypress', function(event) { console.log("keypress start ------------------"); console.log("event type -> " + event.type); console.log("event keyCode -> " + event.keyCode); console.log("event charCode -> " + event.charCode); // コードから文字列を取得する let text_str = String.fromCharCode(event.keyCode); console.log("event text_str -> " + text_str); let disp_text = "event type -> " + event.type + "<br />"; disp_text += "event keyCode -> " + event.keyCode + "<br />"; disp_text += "event charCode -> " + event.charCode + "<br />"; disp_text += "text_str -> " + text_str + "<br />"; let result = document.getElementById("keypress_result"); result.innerHTML = disp_text + "<br />"; }, false); // textInputのイベントハンドラを登録 test1_text.addEventListener('textInput', function(event) { console.log("textInput start ------------------"); console.log("event type -> " + event.type); console.log("event keyCode -> " + event.keyCode); console.log("event charCode -> " + event.charCode); // コードから文字列を取得する let text_str = String.fromCharCode(event.keyCode); console.log("event text_str -> " + text_str); let disp_text = "event type -> " + event.type + "<br />"; disp_text += "event keyCode -> " + event.keyCode + "<br />"; disp_text += "event charCode -> " + event.charCode + "<br />"; disp_text += "text_str -> " + text_str + "<br />"; let result = document.getElementById("textInput_result"); result.innerHTML = disp_text + "<br />"; }, false); // inputのイベントハンドラを登録 test1_text.addEventListener('input', function(event) { console.log("input start ------------------"); console.log("event type -> " + event.type); console.log("event keyCode -> " + event.keyCode); console.log("event charCode -> " + event.charCode); // コードから文字列を取得する let text_str = String.fromCharCode(event.keyCode); console.log("event text_str -> " + text_str); let disp_text = "event type -> " + event.type + "<br />"; disp_text += "event keyCode -> " + event.keyCode + "<br />"; disp_text += "event charCode -> " + event.charCode + "<br />"; disp_text += "text_str -> " + text_str + "<br />"; let result = document.getElementById("input_result"); result.innerHTML = disp_text + "<br />"; }, false); // keydownのイベントハンドラを登録 test1_text.addEventListener('keydown', function(event) { console.log("keydown start ------------------"); console.log("event type -> " + event.type); console.log("event keyCode -> " + event.keyCode); console.log("event charCode -> " + event.charCode); // コードから文字列を取得する let text_str = String.fromCharCode(event.keyCode); console.log("event text_str -> " + text_str); let disp_text = "event type -> " + event.type + "<br />"; disp_text += "event keyCode -> " + event.keyCode + "<br />"; disp_text += "event charCode -> " + event.charCode + "<br />"; disp_text += "text_str -> " + text_str + "<br />"; let result = document.getElementById("keydown_result"); result.innerHTML = disp_text + "<br />"; }, false); // keyupのイベントハンドラを登録 test1_text.addEventListener('keyup', function(event) { console.log("keyup start ------------------"); console.log("event type -> " + event.type); console.log("event keyCode -> " + event.keyCode); console.log("event charCode -> " + event.charCode); // コードから文字列を取得する let text_str = String.fromCharCode(event.keyCode); console.log("event text_str -> " + text_str); let disp_text = "event type -> " + event.type + "<br />"; disp_text += "event keyCode -> " + event.keyCode + "<br />"; disp_text += "event charCode -> " + event.charCode + "<br />"; disp_text += "text_str -> " + text_str + "<br />"; let result = document.getElementById("keyup_result"); result.innerHTML = disp_text + "<br />"; }, false); </script> </body> </html>
画面にアクセスし、テキスト入力欄に「a」と入力してみます。
開発者ツールでも確認可能ですが、取得内容が下記のように画面にも表示されます。
chromeの場合
firefoxの場合
実際に入力して確認すると、各イベントによって、
keyCodeや取得できる文字列が異なることがわかります。
(textInputは取得できていません)