HTML のフォーム送信データを書き換える ― 2021年12月18日 22時28分
この記事は HTML アドベントカレンダーの 18 日目の分、兼 JavaScript アドベントカレンダーの 18 日目の分です。
HTML のフォーム送信処理が実行されるときに、JavaScript を使って送信データを書き換えるにはどうしたらよいでしょうか。まず思いつくのが submit
イベント発生時にフォームコントロール要素の入力値 (value
プロパティの値など) を書き換えることでしょう。別の手段として formdata
イベントがあります。formdata
イベントを利用すれば、フォームコントロール要素に手を加えずに送信データを書き換えることができます。
formdata
イベントに紐づく FormDataEvent
オブジェクトは formData
プロパティを持ち、その値はまさに今送信されようとしているデータを表した FormData
オブジェクトとなっています。この FormData
オブジェクトに対して append
、set
、delete
メソッドを呼び出すことで、送信されるデータを変更することができるのです。
以下の例では、フォームを送信する際に time
というキーに対して現在日時を表す文字列が設定され、/search?q=keyword&time=2021-12-18T12%3A00%3A00.000Z
といった URL に移動します。
<form action="/search"
onformdata="event.formData.append('time', new Date().toISOString());">
<p>
<input type="search" name="q" aria-label="検索する語">
<button type="submit">検索する</button>
</p>
</form>
formdata
イベントは、form
要素オブジェクトを引数にして FormData
コンストラクタを呼び出したとき (new FormData(form)
) にも (引数として渡された form
要素上で) 発生します。
最近のコメント