質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

2774閲覧

[javascript] e.keyCode

xjaPANDA

総合スコア124

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

0クリップ

投稿2017/07/12 23:08

入力した文字をのキーコードを取得して、String.fromCharCode()で、文字にしていますが、アルファベットだけの出力になってしまうので、これを、ひらがなや、多言語として出力するにはどうすればよいでしょうか?

例えば下記のコードでは、console.log()で確認してみると、「F」を押すと、70が出力されます。また、同じキーで日本語入力では「は」を押しても、70が出力されます。また、韓国語のハングルでは、「ㄹ」でも70が出力されます。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Test</title> </head> <body> <script> (function() { function KeyDownFunc(e){ var key_code = String.fromCharCode(e.keyCode); console.log("code:" + e.keyCode); console.log("chr:" + key_code); } if(document.addEventListener){ document.addEventListener("keydown" , KeyDownFunc); } })(); </script> </body> </html>
balls👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

keydown/keypressなどのイベントは「文字の入力」が目的ではなく、「ハードウェアとしてのキーボードの操作を直接検出すること」が目的だと思います。keydownイベントでのkeyCodeは文字コードではなく「キーボード上の特定のキーを表すコード」なので同じキーを操作してもFfなどの区別はしてくれないわけです。

MDN: KeyboardEventには次のような補足があります。文字入力の検出が目的ならinputイベントを使うとよいと思います。

補足: KeyboardEvent とは、単にキーへの動作を表したオブジェクトにすぎません。テキストの入力を処理したい場合は、HTML5 の input イベントを代わりに使用してください。例えば、タブレット PC といった手書きのシステムでユーザがテキスト入力を行う場合、キーに関係するイベントが発火することはありません。

inputイベントではなくkeyboardイベントでASCII以外の文字の検出をしたい場合、keyCodeのシーケンスを解釈するコードを書かなければならないと思います。例えば「カナ」を押して「カナモード」と「ASCIIモード」を切り替え、カナモードの際にはkeyCodeをカナ文字へ、ASCIIモードの際にはASCII文字へ・・・といった単純な機能なら自前での実装も可能だと思います。しかしIMEと同様の複雑なキーシーケンスをテキストとして解釈するような機能を実現するのはあまり現実的とは言えなさそうです。

投稿2017/07/13 01:22

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xjaPANDA

2017/07/13 02:06

アドバイスありがとうございます。KeyboardEvent()でいろいろできそうですね。実験してみます。
guest

0

ベストアンサー

おそらく勘違いされているのは、いわゆる106キーボードで
「F」キーをおすのと「は」キーを押すのはおなじことです
これで得られる70というのは「F」という文字列ではなく
あくまでもそのキーに割り当てられた番号にすぎません。

e.keyCodeから得た数字をもとに他言語に変換するには
変換用の配列を用意しておいておきかえてやるのが妥当です。
そうでない場合はoninputイベントで入力した「文字」自体を
受け取ってやって下さい

投稿2017/07/13 01:19

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xjaPANDA

2017/07/13 02:03

アドバイスを元に調べてみると、キーボードにも、いろいろタイプがあるようですね。知りませんでした。配列に番号ごとにひとつづつ定義するのが妥当かもしれませんね。ありがとうございます。
guest

0

そもそも、入力フォームにフォーカスを当てないとIMEが出ませんし、ローマ字入力の環境ではkeydownにひらがなを投げること自体ができないと思うのですが…

投稿2017/07/13 00:18

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xjaPANDA

2017/07/13 01:59

アドバイスを元に調べてみるとても参考になります。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問