HTMLフォームに複数のSubmitボタンを挿入する際のJavascript処理



前回はForm寸法の更新と維持のテクニック勉強しました次に、フォームに複数のSubmitボタンがある場合、どうすればいいかについて説明します.設計の制限のため、Submitボタンをフォームに添付するしかない場合、どのように符号化するかについて説明します.

Formには少なくとも2つのSubmitボタンがあります。


マーク

<form>
  <input type="text" name="name1" />
  <input type="text" name="name2" />
  
  <button type="submit" data-submit-type="search">조회</button>
  <button type="submit" data-submit-type="excel">엑셀 다운로드</button>
</form>
処理中、「照会」ボタンと「Excelのダウンロード」ボタンをsubmitボタンにしたいと思います.「Excelダウンロード」には、フォーム入力をパラメータとして渡すロジックもあるため、フォームのsubmitプロセッサのすべてのロジックがFormDataを共有し、メンテナンスを簡素化できます.
submitプロセッサでsubmitタイプを区別するには、submitTypeをデータセットに追加します.

イベントリスナーの登録

const  formElement = document.querySelector('form selector');

formElement.addEventListener('submit', handleSubmit);
submitイベントをバインドするだけで、メンテナンスが行えます.

イベントハンドラ

function handleSubmit(e) {
  e.preventDefault();
  
  const formData = new FormData(e.target);
  const submitType = e.submitter.dataset.submitType // submitter: IE 미지원
  
  switch (submitType) {
    case 'search':
      search(formData); break;
    case 'excel':
      downExcel(formData); break;
    default:
      console.error('알 수 없는 submit type');
  }
}
  • AJAXリクエストでは、フォームのデフォルトイベントが削除されます.
  • e.submitterからsubmitをトリガーするボタン要素をインポートできます.要素のデータセットを読み込んでsubmitTypeを識別します.
  • サブタイプを決定したら、FormDataを使用して対応するサービス関数を実行します.
  • サービス関数でフォームデータを検証し、AJAX要求などの論理を送信すればよい.
  • SubmitボタンはFormの外にあります。

    <form id="someForm">
      <input type="text" name="name1" />
      <input type="text" name="name2" />
      
      <button type="submit" data-submit-type="search">조회</button>
    </form>
    ...
    ...
    <button type="submit" form="someForm" data-submit-type="excel">엑셀 다운로드</button>
    設計上の制限によりsubmitボタンはフォームの外部にしか存在しませんが、このボタンがフォームに明らかに関連している場合は、次のようにフォーム属性にフォームのidを指定することで接続できます.