ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
エラーの状況
# Chrome の警告
Form submission canceled because the form is not connected.
# 動作: フォーム送信が実行されない
# サーバへリクエストが行かない
原因と対処
原因 1: form が DOM から削除されている
# 修正: 削除前に送信
form.submit();
form.remove(); // 送信後に削除
原因 2: appendChild する前の動的フォーム
// 動的フォームをまだ append していない
const form = document.createElement("form");
form.action = "/api/submit";
form.method = "POST";
const input = document.createElement("input");
input.name = "token";
input.value = "abc123";
form.appendChild(input);
form.submit();
// → Form is not connected (まだ DOM に追加されていない)
// 修正: body に追加してから submit
document.body.appendChild(form);
form.submit();
// 一般的なパターン: 自動送信
const autoSubmit = () => {
const form = document.createElement("form");
form.action = "/payment/external";
form.method = "POST";
const fields = { token: "abc", amount: 1000 };
for (const [key, value] of Object.entries(fields)) {
const input = document.createElement("input");
input.type = "hidden";
input.name = key;
input.value = value;
form.appendChild(input);
}
document.body.appendChild(form); // ← 必須
form.submit();
};
原因 3: action 属性が空 / 不正
原因 4: SPA でフォーム要素が remove された
// React / Vue 等で
function MyForm() {
const [show, setShow] = useState(true);
return show ? (
) : null;
}
// onSubmit ハンドラ内で setShow(false) すると DOM から消える
// その後 e.target.submit() するとエラー
イベントハンドラからの submit
// フォーム送信前にチェック
document.getElementById("myForm").addEventListener("submit", (e) => {
e.preventDefault();
// バリデーション
if (!validate()) {
return;
}
// データ加工
const data = new FormData(e.target);
data.append("timestamp", Date.now());
// submit (e.target がまだ DOM にある)
e.target.submit();
// ❌ こうすると問題:
// e.target.remove(); // ← submit より前に削除
});
fetch / Ajax 推奨
動的フォーム送信なら form.submit() よりも fetch / XHR が制御しやすい:
// fetch でフォームデータ送信
document.getElementById("myForm").addEventListener("submit", async (e) => {
e.preventDefault();
const formData = new FormData(e.target);
try {
const response = await fetch(e.target.action, {
method: e.target.method || "POST",
body: formData,
});
const result = await response.json();
console.log(result);
} catch (error) {
console.error("送信失敗:", error);
}
});
# メリット:
# - フォーム要素の状態に依存しない
# - レスポンスを受け取れる
# - エラーハンドリング可能
# - ページ遷移なし
外部サイト連携での自動送信パターン
// 決済プロバイダ等への自動 POST
function redirectToPayment(token, amount) {
const form = document.createElement("form");
form.action = "https://payment.example.com/checkout";
form.method = "POST";
form.style.display = "none";
const fields = {
token: token,
amount: amount,
return_url: location.origin + "/payment/return"
};
for (const [key, value] of Object.entries(fields)) {
const input = document.createElement("input");
input.type = "hidden";
input.name = key;
input.value = value;
form.appendChild(input);
}
// body に追加してから submit
document.body.appendChild(form);
// submit の直前に form がまだ DOM にあることを確認
if (form.isConnected) {
form.submit();
} else {
console.error("フォームが DOM から消えた");
}
}
関連: form 要素のチェック
// form.isConnected (DOM に接続されているか、ES6+)
const form = document.getElementById("myForm");
if (form && form.isConnected) {
form.submit();
}
// 古い書き方
if (form && document.body.contains(form)) {
form.submit();
}
// document.contains で確認
if (form && document.contains(form)) {
form.submit();
}
関連エラー
Form submission canceled because the form is not connected: このページFailed to construct \'URL\': action 属性が不正な URLCORS error: 別オリジンへの送信Mixed Content: HTTPS ページから HTTP の form action
関連記事
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- Uncaught TypeError: Illegal invocation
- Form submission canceled because the form is not connected
- Uncaught TypeError: location.href is not a function
- Access to XMLHttpRequest at 'url1' from origin 'url2' has been blocked
- Uncaught TypeError: Cannot read properties of null (reading 'addEventListener')
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?