この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-11 07:10:02

タイトル: buttonでformをsubmitさせない方法
SEOタイトル: button で form を submit させない方法 完全ガイド(type="button" / preventDefault / Enter キー / フォーム外 / アクセシビリティ)

この記事の要点
  • の中に置いた
  • JavaScript 側で止めるなら event.preventDefault() をクリックハンドラ先頭で呼ぶ
  • Enter キーでの暗黙送信を防ぐなら form 全体の submit イベントpreventDefault
  • ボタンをform の外に置く、または form="別 form の id" で関連先を切り替える方法もある
  • アクセシビリティ: 単なる装飾なら
    ではなく

結論: type="button" を明示する

の内側にある

button 要素の type 一覧

type動作
submit(既定)所属する form を送信
button何もしない(JS から制御)
resetform を初期値に戻す

JavaScript で止める

既存コードで type を書き換えられない、または条件によって送信したいときは preventDefault() を使います。

// クリック時に止める
document.querySelector('#myBtn').addEventListener('click', e => {
  e.preventDefault();    // submit 動作キャンセル
  // ここで自前処理
  doSomething();
});

// onclick 属性内なら return false でも止まる(古典)
// 

Enter キー暗黙送信を止める

type="button" でも、フォーム内のテキスト入力でEnter キーを押すと、フォーム内で最初に見つかった type="submit" ボタン(もしくはデフォルト挙動)で送信されます。送信を全面禁止したい場合は、form の submit イベント自体を止めます。

const form = document.querySelector('#searchForm');
form.addEventListener('submit', e => {
  e.preventDefault();      // どんな経路でも送信させない
  // ここで Ajax / 自前処理
  fetchResults(form.elements.q.value);
});

あるいはテキスト入力の Enter キーを個別に止める方法もあります。

input.addEventListener('keydown', e => {
  if (e.key === 'Enter') {
    e.preventDefault();
  }
});

form の外にボタンを出す / 関連付け替え

レイアウト上どうしても form の中に置きたいが、送信対象にしたくないケースでは、HTML5 の form 属性で所属を切り替えることもできます。


2 つ以上の送信ボタンを使い分ける

「下書き保存」「公開」のように同じ form で複数の送信先を持ちたいときは、formaction / formmethod 属性で個別に上書きできます。

アクセシビリティ上の補足

「クリックできる装飾」を作りたいときに

を使うのは避け、