【初心者必見】HTMLフォームが送信できない原因と対処法まとめ|form・input・actionを完全解説

【初心者必見】HTMLフォームが送信できない原因と対処法まとめ|form・input・actionを完全解説

2026.01.13

はじめに:送信ボタンを押しても「何も起きない」恐怖

フォームを作ったのに、

  • 送信ボタンを押してもページが変わらない
  • エラーも出ない
  • コンソールにも何も出ない

…これ、地味に焦りますよね。

私も最初に遭遇したとき、「サーバー壊れた?」と思いました。

でもほとんどの場合、原因はシンプルです。

HTMLの基本構造ミスです。

この記事では、フォームが送信できない原因を
構造レベルから徹底的に分解していきます。


結論:フォーム送信は「構造」が9割

HTMLフォームが送信できない原因の大半は:

  • form構造の不備
  • submit設定ミス
  • name属性忘れ
  • JSによる送信キャンセル
  • CSSでクリック不能

です。

順番に確認すれば、必ず解決できます。


まず確認:最小構成の正しいフォーム

これが動作確認用の最小構成です。

<form action="send.php" method="post">
  <input type="text" name="name">
  <button type="submit">送信</button>
</form>

まずはこれを作って動くか確認しましょう。

動かないなら環境問題。
動くなら追加コードが原因。


原因①:formタグが存在しない

意外と多いです。

NG

<input type="text" name="name">
<button type="submit">送信</button>

formが無いと送信という概念自体がありません。


原因②:actionが間違っている

actionは送信先URL。

<form action="send.php" method="post">

よくあるミス

  • パスが間違っている
  • PHPファイルが存在しない
  • 相対パスのミス

DevToolsの「Network」タブで確認できます。


原因③:methodの理解不足

methodを省略するとデフォルトはGET。

<form action="send.php">

サーバー側がPOST前提だと処理されません。

明示しましょう。

method="post"

原因④:submitボタンが存在しない

NG

<button type="button">送信</button>

type="button"は送信しません。

正解

<button type="submit">送信</button>

または

<input type="submit" value="送信">

原因⑤:name属性がない

これ、超重要です。

<input type="text" required>

送信はされます。
でもサーバーには何も届きません。

必ず:

<input type="text" name="name">

nameは送信データのキーです。


原因⑥:requiredがブロックしている

<input type="text" name="name" required>

未入力ならブラウザが送信を止めます。

エラーが見えない場合は:

  • フォーム外にスクロールしていないか
  • CSSでエラーバブルが隠れていないか

確認しましょう。


原因⑦:JavaScriptで止めている

よくある犯人。

event.preventDefault();

バリデーションJSが送信を止めているケース多数。

確認方法

  1. DevToolsを開く
  2. Consoleにエラーが出ていないか
  3. Event Listenersを確認

原因⑧:novalidateが付いている

<form novalidate>

これがあるとブラウザバリデーションは無効。

フレームワーク使用時に入っていることがあります。


原因⑨:CSSでクリックできない

見た目は押せるのに反応しない。

button {
  pointer-events: none;
}

または:

  • z-indexで覆われている
  • position:absoluteで重なっている

DevToolsでボタンを検証すれば分かります。


原因⑩:buttonがform外にある

<form>
  <input type="text">
</form>

<button type="submit">送信</button>

これでは送信されません。


DevToolsでの確認手順(実務必須)

送信できないときは:

① Elementsで構造確認

  • formが正しく閉じているか
  • buttonはform内か

② Networkタブ確認

  • リクエストが発生しているか
  • ステータスコードは?

③ Console確認

  • JSエラー出ていないか

ここまでやれば必ず原因は見つかります。


横スクロールやスマホ崩れが原因になるケース

  • ボタンが画面外にある
  • フォームがoverflow:hiddenで隠れている
  • スマホでタップ領域が重なっている

レスポンシブ時は特に要注意。


よくある初心者の誤解

  • HTMLが壊れていると思い込む
  • サーバーが悪いと疑う
  • CSSは関係ないと思っている

実際は「構造ミス」がほとんど。


フォーム送信トラブルチェックリスト

✔ formで囲まれている
✔ actionが正しい
✔ methodが正しい
✔ submitボタンがある
✔ name属性がある
✔ required未入力ではない
✔ JSで止めていない
✔ CSSでクリック不可になっていない

これで9割解決。


HTML・CSS・JSの役割整理

  • HTML:送信構造
  • CSS:見た目
  • JavaScript:動作制御

送信自体はHTMLの責任です。


まとめ:フォーム送信できない=基本を疑え

フォームが送信できないときは、

まず最小構成に戻す。

そこから1つずつ機能を足す。

焦らず構造を確認すれば、
必ず原因は見つかります。

フォーム設計はWeb制作の基礎。

ここを理解すると、
一気にレベルが上がります。

タグ:

#CSS #HTML #フォーム #バリデーション #初心者向け