Gojabako ZoneKei Ito

disabledなフォーム要素はsubmitされない

に公開に更新)履歴 (10)

Reactだとたいていの<form>でsubmitをpreventDefaultするので意識しないのですが、Next.jsはAPI Routesがあるので<form>のactionでそこに繋ぐことがあります。

このときユーザーに操作させない要素をdisabledにすることがあるのですが、操作を無効にする以外のdisabled属性の作用についてよく知らなかったのでその実験をしました。

## disabledなフォーム要素

<input>の値を保護しようとしてdisabledを設定すると、値が足らずサーバーがBadRequestを返すようになりました。足りていない値を確認するとdisabledを設定した要素のvalueでした。

### disabledなinputのあるフォーム

このページにGETするので送信するとアドレスバーのクエリ文字列で値を確認できます。おそらく{'?v1-1=value1&v1-2=value2'}になるはずです。

現在のクエリ文字列: なし

いつもfetchで送っていたので気がつかなかったのですが、disabledな要素の値はフォームの送信に含まれません。

## disabledなfieldset

フォームの要素は<fieldset>でグループにできます。この<fieldset>にはdisabledが指定できます。先の結果から予想するとdisabledにするとそのグループの値は送信されないでしょう。確認してみます。

disabledなfieldsetのあるフォーム

このページにGETするので送信するとアドレスバーのクエリ文字列で値を確認できます。

現在のクエリ文字列: なし

<fieldset>
<fieldset disabled>

2つ目の<fieldset>の中のv2-3v2-4は送信されません。disabledな<fieldset>の中の値は送信されません。

## disabledの使い所

例えば「Q2で いいえ と答えた方は入力してください」のように文脈で無効である場合にはdisabledを使い、送信中の値の保護であればreadonly1を使うようにしています。

## Footnotes

  1. readonlyは<input type="submit"/>に使えないなどの条件があります。参考: HTML 属性: readonly - HTML: HyperText Markup Language | MDN