Vue.js で日本語変換での誤発火を抑止しつつ Enter キーで Submit
はじめに
Vue.js で入力フォーム フォーカス中に Enter
キーで Submit させる方法について整理した。
ほぼ参考サイトの通り。
TL;DR
- 単純に
@keyup.enter
を使うと、日本語変換での確定 Enter も対象になる @keypress.enter
だと、日本語変換での確定 Enter は発火しない- 組み合わせてフラグ管理することで実現
目次
環境・条件
1 | $ cat /etc/os-release |
- Google Chrome バージョン: 80.0.3987.149(Official Build) (64 ビット)
詳細
参考サイトについて
それぞれやり方は異なるが、考え方は同じ。
- VueのEnterキーイベントで日本語入力中のEnterを制御する:
@keydown.enter
を利用 - [Vue.js] 日本語変換の確定でkeyup.enterが発火してしまうのを防ぐ:
@keypress
を利用
完成形(自分の場合の)
1 | <template> |
さっくりとした処理の流れ
keyup
, keydown
, keypress
のイベント発火まわりについては、簡単に以下にまとめてる。
日本語変換の場合
Enter キー Down
→ @keypress
発火なし
→ Enter キー Up
→ @keyup
が発火
→ フラグ Off で Submit 無し
日本語変換でない場合
Enter キー Down
→ @keypress
発火
→ フラグ On
→ Enter キー Up
→ @keyup
が発火
→ フラグ On で Submit
→ フラグ Off
keydown でない理由
どちらが正しいとか言う話ではなくて、「日本語確定時に Enter 押しっぱなしにするとそのまま Submit されるのが個人的にモヤっとした」というだけ。
※ちなみに Google の検索フォームで試したら、そのまま Submit された。
まとめ
- 単純に
@keyup.enter
を使うと、日本語変換での確定 Enter も対象になる @keypress.enter
だと、日本語変換での確定 Enter は発火しない- 組み合わせてフラグ管理することで実現
参考文献
- イベントハンドリング — Vue.js
- [Vue.js] 日本語変換の確定でkeyup.enterが発火してしまうのを防ぐ - Qiita
- VueのEnterキーイベントで日本語入力中のEnterを制御する - Qiita
関連記事
- Chart.js(vue-chartjs) でツールチップの表示内容を変更
- Vue で子コンポーネントのメソッドをコールする
- apertureless/vue-chartjs でチャートの高さ(や幅、サイズ)を変更
- Chart.js で X軸, Y軸の値をカスタマイズ
- Chart.js(vue-chartjs) で凡例の一部を非表示にする方法
- Vue でキーボードでの要素間の移動
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア