【初心者向け】HTMLフォーム送信結果の表示先を制御する:formtarget属性の役割と使い方


formtarget属性の役割

  • <form>要素のtarget属性よりも優先的に適用されます。
  • <button>要素、<input>要素などで使用できます。
  • 以下の3つの値を指定できます。
    • _blank:新しい空白ウィンドウに表示
    • _self:現在のウィンドウに表示(デフォルト)
    • _parent:親ウィンドウに表示
  • フォーム送信結果の表示先を指定します。

formtarget属性の書き方

<form>
  ...
  <input type="submit" formtarget="_blank">
  ...
</form>

上記の例では、フォーム送信時に送信結果が新しい空白ウィンドウに表示されます。

  • 親ウィンドウに送信することで、親ウィンドウ側で処理を実行することができます。
  • 広告やアンケートなど、メインコンテンツとは異なる内容を新しいウィンドウに表示するのに適しています。
  • 送信結果を別のウィンドウに表示することで、ユーザーの操作を妨げずに情報を提供できます。
  • 古いブラウザでは、formtarget属性がサポートされていない場合があります。
  • フレームを使用する場合は、フレームの名前をformtarget属性の値として指定する必要があります。
  • formtarget属性は、JavaScriptによって動的に変更することもできます。


新しい空白ウィンドウに送信結果を表示

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>formtargetサンプル</title>
</head>
<body>
  <h1>フォーム送信</h1>
  <form action="result.html" method="post" target="_blank">
    <label for="name">名前:</label>
    <input type="text" id="name" name="name">
    <br>
    <label for="email">メールアドレス:</label>
    <input type="email" id="email" name="email">
    <br>
    <input type="submit" value="送信">
  </form>
</body>
</html>
  • ユーザーが入力した名前とメールアドレスは、result.htmlで受け取ることができます。
  • 送信結果は新しい空白ウィンドウに表示されます。
  • フォーム送信時にresult.htmlにPOSTリクエストで送信されます。

result.html

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>送信結果</title>
</head>
<body>
  <h1>送信結果</h1>
  <p>名前:${name}</p>
  <p>メールアドレス:${email}</p>
</body>
</html>

上記の例では、result.htmlで以下の内容を表示します。

  • 送信された名前とメールアドレス
  • 実際の開発では、サーバーサイド言語を使用して、送信されたデータを処理する必要があります。
  • ${name}${email}は、JavaScriptのテンプレートリテラルを使用して、送信された名前とメールアドレスを埋め込んでいます。

親ウィンドウに送信結果を表示

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>formtargetサンプル</title>
</head>
<body>
  <h1>フォーム送信</h1>
  <form action="result.php" method="post" target="_parent">
    <label for="name">名前:</label>
    <input type="text" id="name" name="name">
    <br>
    <label for="email">メールアドレス:</label>
    <input type="email" id="email" name="email">
    <br>
    <input type="submit" value="送信">
  </form>
</body>
</html>

この例では、以下のフォームを作成します。

  • ユーザーが入力した名前とメールアドレスは、result.phpで受け取ることができます。
  • 送信結果は親ウィンドウに表示されます。
  • フォーム送信時にresult.phpにPOSTリクエストで送信されます。

result.php

<?php

// 送信されたデータを取得
$name = $_POST['name'];
$email = $_POST['email'];

// 送信結果を表示
echo '<h1>送信結果</h1>';
echo '<p>名前:' . htmlspecialchars($name) . '</p>';
echo '<p>メールアドレス:' . htmlspecialchars($email) . '</p>';

?>

上記の例では、result.phpで以下の内容を表示します。

  • 送信された名前とメールアドレス
  • 実際の開発では、データベースに送信されたデータを保存したり、他の処理を実行したりする必要があります。
  • htmlspecialchars()関数を使用して、送信されたデータに含まれる特殊文字をエスケープしています。
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>formtargetサンプル</title>
</head>
<body>
  <h1>フォーム送信</h1>
  <iframe name="resultFrame" src="about:blank" width="300" height="200"></iframe>
  <form action="result.html" method="post" target="resultFrame">
    <label for="name">名前:</label>
    <input type="text" id="name" name="name">
    <br>
    <label for="email">メールアドレス:</label>
    <input type="email" id="email" name="email">
    <br>
    <input type="submit"


JavaScriptを使用する

  • 以下の例では、フォーム送信時に新しい空白ウィンドウを開き、送信結果を表示します。
  • window.open()関数を使用して、新しいウィンドウを開き、そのウィンドウに送信結果を表示することができます。
<form onsubmit="return openResultWindow()">
  ...
  <input type="submit" value="送信">
</form>

<script>
function openResultWindow() {
  var resultWindow = window.open("result.html", "", "width=300,height=200");
  if (resultWindow) {
    document.forms[0].target = resultWindow.name;
    return true;
  } else {
    alert("新しいウィンドウを開けませんでした。");
    return false;
  }
}
</script>

<iframe>要素を使用する

  • 以下の例では、フォームの下に<iframe>要素を設置し、送信結果を表示します。
  • フォームと同じHTMLドキュメント内に<iframe>要素を設置し、そのiframeに送信結果を表示することができます。
<form target="resultFrame">
  ...
  <input type="submit" value="送信">
</form>

<iframe id="resultFrame" name="resultFrame" src="about:blank" width="300" height="200"></iframe>

サーバーサイドで処理する

  • この方法では、JavaScriptや<iframe>要素を使用するよりも柔軟な処理が可能ですが、サーバーサイド言語の知識が必要となります。
  • フォーム送信結果をサーバーサイドで処理し、新しいページを生成して表示することができます。
  • ただし、この方法は、ユーザーの操作を妨げる可能性があるため、あまり推奨されていません。
  • <meta>要素のrefresh属性を使用して、送信後に新しいページにリダイレクトする方法もあります。
  • ユーザーの操作性
  • 送信結果の表示方法
  • 使用する技術の難易度