2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【React / JS】Enterキーで入力を確定する方法【日本語入力対応】

Last updated at Posted at 2024-06-18

完成イメージ

React-Todo-App.gif
ボタン無し・Enterキーで入力を確定させる

この記事について

入力を確定させる時、ボタンをクリックさせるのは手間です。

  • Enterキーを押したら入力を確定したい
  • ただし、日本語変換を確定させるEnterには反応したくない

そんな需要に応える記事です。

Reactを例に書きますが、バニラの(素の)JavaScript / HTMLでも同様の考え方で対応できます。

登場する技術等

技術 説明
onKeyDown 何かしらのキーが押されたときに発火(発動)するイベントハンドラ。React固有?
バニラのJSで使いたい場合はaddEventListener("keydown", ()=>{})を使おう
onCompositionStart / onCompositionEnd 変換が開始 / 終了したときに発火(発動)するイベントハンドラ

Enterで入力を確定

こちらは簡単です。

Reactの例

// JS部分
function handleKeyDown(event) {
  if (event.key === 'Enter') {
    // 入力を確定したときの処理(送信・表示・入力フォームのクリアなど)
  }
}

// HTML部分
<input onKeyDown={handleKeyEvent}>

日本語変換の確定と、入力の確定を判定する

先程のコードは、Enterを押すと問答無用で「入力を確定したときの処理」を行います。

英語入力であれば問題ないのですが、日本語の入力は「変換を確定させるEnter」があるため、この2つのEnterを仕分ける必要があります。

変換中かどうかを「変換の開始onCompositionStart」と「変換の終了onCompositionEnd」を使って管理・判定します。

Reactの例

// JS部分
const [isComposing, setIsComposing] = useState(false);

function handleKeyDown(event) {
  if (event.key === 'Enter' && !isComposing) {
    // 入力を確定したときの処理(送信・表示・入力フォームのクリアなど)
  }
}

// HTML部分
<input
  onKeyDown={handleKeyDown}
  onCompositionStart={() => setIsComposing(true)}
  onCompositionEnd={() => setIsComposing(false)}
/>

以上、Enterキーで入力を確定する方法でした。

冒頭のイメージは、以下のリポジトリに置いておきます。

コードを詳しく見たい方はどうぞ。src/App.jsxです。


マサカリ、受け付けてます_(´ཀ`」 ∠)_

やってみての感想、ストック、いいねも大歓迎です!

参考

2
2
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?