JavaScript EnterキーでのSubmitを無効にする方法
エンター(Enter
)キーを押したときにフォーム(Form
)を送信(Submit
)するのをJavaScript
で無効にする方法を紹介します。
エンターキーが押されたかどうかの判定はkeydown
イベントで行います。
そのため、まずは制御したいフォームのコントロールにkeydown
のイベントを定義します。
// 対象のフォームコントロールを取得
const form = document.getElementById('form1');
// フォームのkeydownイベントを設定
form.addEventListener('keydown', function (event) {
});
keydown
イベントのパラメータevent
に押されたキーの情報があります。
event.keyCode
でキーの情報を取得できます。
エンターキーが押された場合はevent.keyCode
に13
がセットされていますので、この値が13
かどうかでエンターキーが押されたかどうかを判定します。
// 対象のフォームコントロールを取得
const form = document.getElementById('form1');
// フォームのkeydownイベントを設定
form.addEventListener('keydown', function (event) {
if (event.keyCode === 13) {
// エンターキーが押されたときの動作
}
});
keydown
のイベント関数のパラメータevent
でevent.preventDefault();
を実行すると、イベントはキャンセルされます。
エンターキーの場合はイベントを無効にしますが、submit
ボタン上でエンターキーを押したときや、テキストエリアで入力中にエンターキーを押して改行したい場合などは、エンターキーのイベントは有効にする必要があります。
event.srcElement
でイベントの発生元の情報が取得できます。
event.srcElement.type
がsubmit
、textarea
以外の場合のみイベントをキャンセルするようにします。
最終的には以下のようになります。
// 対象のフォームコントロールを取得
const form = document.getElementById('form1');
// フォームのkeydownイベントを設定
form.addEventListener('keydown', function (event) {
if (event.keyCode === 13) {
// エンターキーが押されたときの動作
if (event.srcElement.type != 'submit' &&
event.srcElement.type != 'textarea') {
// submitボタン、テキストエリア以外の場合はイベントをキャンセル
event.preventDefault();
return false;
}
}
});