formaction属性を超えた!HTMLフォーム送信先URLの柔軟な制御方法

2024-06-20

HTML の formaction 属性:詳細ガイド

formaction 属性のしくみ

  1. <form> 要素には、action 属性を使用して、デフォルトの送信先 URL を設定します。
  2. <input type="submit"> または <button> 要素に formaction 属性を設定すると、そのボタンまたは入力フィールドがクリックされたときに送信される URL を個別に指定できます。
  3. formaction 属性 が設定されたボタンまたは入力フィールドがクリックされた場合、その要素の formaction 属性値がフォームの action 属性値を 上書き し、フォームデータはその URL に送信されます。
  4. formaction 属性 が設定されていないボタンまたは入力フィールドがクリックされた場合、またはフォームが JavaScript コードなどで送信された場合は、フォームの action 属性値がデフォルトの送信先 URL として使用されます。
  • 柔軟性の向上: 単一のフォームで複数の処理を柔軟に処理できます。例えば、フォーム送信時にデータを保存するボタンと、新しいデータを追加するボタンをそれぞれ設定することができます。
  • ユーザーインターフェースの向上: ユーザーがフォーム内で何を実行しようとしているのかを明確に示すことができます。
  • 開発の簡素化: JavaScript を使用せずに、フォームの送信先 URL を動的に変更できます。

以下の例は、formaction 属性を使用して、フォーム送信時にデータを保存するボタンと、新しいデータを追加するボタンをそれぞれ設定する方法を示しています。

<form action="default_processor.php">
  <input type="text" name="username">
  <input type="text" name="email">

  <button type="submit" formaction="save_data.php">保存</button>
  <button type="submit" formaction="add_new_data.php">新規追加</button>
</form>

上記の例では、ユーザーが "保存" ボタンをクリックした場合、フォームデータは save_data.php に送信されます。一方、ユーザーが "新規追加" ボタンをクリックした場合、フォームデータは add_new_data.php に送信されます。

  • formaction 属性は、<input type="submit"><button> 要素でのみ使用できます。
  • formaction 属性は、HTML5 で導入された比較的新しい属性であるため、古いブラウザーではサポートされない場合があります。

formaction 属性は、HTML5 で導入された便利な属性であり、単一のフォームで複数の処理を扱う場合などに威力を発揮します。この属性を理解することで、より柔軟でユーザーフレンドリーなフォームを作成することができます。



    HTML の formaction 属性に関するサンプルコード

    例 1: 単一のフォームで複数の処理を行う

    <form>
      <input type="text" name="username">
      <input type="text" name="email">
    
      <button type="submit" formaction="save_data.php">保存</button>
      <button type="submit" formaction="add_new_data.php">新規追加</button>
    </form>
    

    例 2: JavaScript を使用して formaction 属性を動的に変更する

    この例では、JavaScript を使用して、ユーザーの選択に応じて formaction 属性値を動的に変更する方法を示します。

    <form id="myForm">
      <input type="text" name="username">
      <input type="text" name="email">
    
      <select id="process">
        <option value="save_data.php">保存</option>
        <option value="add_new_data.php">新規追加</option>
      </select>
    
      <button type="submit">送信</button>
    </form>
    
    <script>
      const form = document.getElementById('myForm');
      const select = document.getElementById('process');
    
      form.addEventListener('submit', function(event) {
        event.preventDefault();
        form.action = select.value;
        form.submit();
      });
    </script>
    

    この例では、<input type="image"> 要素を使用して、formaction 属性を設定する方法を示します。

    <form action="default_processor.php">
      <input type="text" name="username">
      <input type="text" name="email">
    
      <input type="image" src="save_icon.png" formaction="save_data.php" alt="保存">
      <input type="image" src="add_icon.png" formaction="add_new_data.php" alt="新規追加">
    </form>
    

    これらの例は、formaction 属性を使用して、HTML フォームの送信先 URL を柔軟に制御する方法を示すほんの一例です。この属性を創造的に使用することで、ユーザーにとってよりインタラクティブで使いやすいフォームを作成することができます。



    HTML の "formaction" 属性の代替方法

    しかし、formaction 属性はいくつかの制限があります。

    • 古いブラウザーではサポートされない場合があります。
    • JavaScript を使用しないと、動的に変更することができません。

    これらの制限を回避するために、formaction 属性の代替方法をいくつか検討する必要があります。

    これは、formaction 属性の最も一般的な代替方法です。以下の手順で行います。

    1. 各ボタンまたは入力フィールドに、一意の ID またはクラスを割り当てます。
    2. JavaScript を使用して、これらの要素の click イベントを処理します。
    3. イベントハンドラー内で、form 要素の action 属性を、送信先の URL に設定します。

    この方法は、柔軟性が高く、古いブラウザーでも動作します。

    <form id="myForm">
      <input type="text" name="username">
      <input type="text" name="email">
    
      <button type="button" id="saveButton">保存</button>
      <button type="button" id="addNewButton">新規追加</button>
    </form>
    
    <script>
      const form = document.getElementById('myForm');
      const saveButton = document.getElementById('saveButton');
      const addNewButton = document.getElementById('addNewButton');
    
      saveButton.addEventListener('click', function() {
        form.action = 'save_data.php';
        form.submit();
      });
    
      addNewButton.addEventListener('click', function() {
        form.action = 'add_new_data.php';
        form.submit();
      });
    </script>
    

    代替方法 2: 複数のフォームを使用する

    各処理ごとに個別のフォームを作成することで、formaction 属性を使用せずに送信先 URL を指定することができます。

    <form action="save_data.php">
      <input type="text" name="username">
      <input type="text" name="email">
      <button type="submit">保存</button>
    </form>
    
    <form action="add_new_data.php">
      <input type="text" name="username">
      <input type="text" name="email">
      <button type="submit">新規追加</button>
    </form>
    

    この方法は、シンプルでわかりやすいですが、複数のフォームを管理する必要があり、コードが冗長になる可能性があります。

    代替方法 3: カスタム属性を使用する

    data-* 属性を使用して、送信先 URL を各ボタンまたは入力フィールドにデータ属性として保存し、JavaScript を使用してこれらの属性値を処理することができます。

    <form>
      <input type="text" name="username">
      <input type="text" name="email">
    
      <button type="button" data-action="save_data.php">保存</button>
      <button type="button" data-action="add_new_data.php">新規追加</button>
    </form>
    
    <script>
      const form = document.querySelector('form');
      const buttons = form.querySelectorAll('button');
    
      buttons.forEach(button => {
        button.addEventListener('click', function() {
          const action = button.dataset.action;
          form.action = action;
          form.submit();
        });
      });
    </script>
    

    この方法は、比較的新しい方法ですが、柔軟性と可読性を兼ね備えています。

    formaction 属性は、HTML フォームの送信先 URL を個別に設定する便利な機能ですが、いくつかの制限があります。上記の代替方法を検討することで、より柔軟で堅牢なフォームを作成することができます。

    最適な代替方法は、特定の要件と開発者の好みによって異なります。

    • [HTML5 & CSS3 リファレンス - action属性 (