Living Standard — Last Updated 12 December 2024
form
elementlabel
elementSupport in all current engines.
この節は非規範的である。
A form is a component of a web page that has form controls, such as text, buttons, checkboxes, range, or color picker controls. さらなる処理(たとえば、検索または計算結果を返す)に対してサーバーに送信できるデータを提供して、ユーザーはそのようなフォームで情報を交換できる。スクリプトがユーザーエクスペリエンスを補強するか、またはサーバーにデータを送信する以外の意義に対してフォームを使用できるようなAPIが利用可能であるが、多くの場合クライアント側のスクリプトは必要ない。
フォームの記述は、ユーザーインターフェイスを記述する、サーバー側の処理を実装する、そのサーバーと通信するためのユーザーインターフェイスを構成するという、任意の順序で実行される複数のステップから成る。
この節は非規範的である。
この簡単な手引きの目的に対して、ピザを注文するフォームを作成する。
すべてのフォームは、内部にコントロールを配置されたform
要素で始まる。ほとんどのコントロールは、デフォルトでテキストコントロールを提供するinput
要素によって表される。コントロールをラベル付けするために、label
要素が使用される。ラベルテキストおよびコントロール自身は、label
要素の中に入る。フォームの各部分は段落とみなされ、通常はp
要素を使用して他の部分から分離される。これを一緒に置くと、これは顧客の名前を尋ねることができる方法の一つである:
< form >
< p >< label > Customer name: < input ></ label ></ p >
</ form >
ユーザーにピザのサイズを選択させるために、ラジオボタンのセットを使用できる。ラジオボタンはまた、今回は値のradio
とともにtype
属性をもつ、input
要素を使用する。グループとしてラジオボタンを動作させるために、それらはname
属性を使用して、共通の名前を与えられる。この場合、ラジオボタンのように、一緒にコントロールのバッチをグループ化するために、fieldset
要素を使用できる。コントロールのグループのようなタイトルは、fieldset
内の最初の要素で与えられる。これは、legend
要素である必要がある。
< form >
< p >< label > Customer name: < input ></ label ></ p >
< fieldset >
< legend > Pizza Size </ legend >
< p >< label > < input type = radio name = size > Small </ label ></ p >
< p >< label > < input type = radio name = size > Medium </ label ></ p >
< p >< label > < input type = radio name = size > Large </ label ></ p >
</ fieldset >
</ form >
前のステップからの変更点が強調表示される。
トッピングを選ぶために、チェックボックスを使用できる。これらは、値checkbox
をもつtype
属性とともにinput
要素を使用する。
< form >
< p >< label > Customer name: < input ></ label ></ p >
< fieldset >
< legend > Pizza Size </ legend >
< p >< label > < input type = radio name = size > Small </ label ></ p >
< p >< label > < input type = radio name = size > Medium </ label ></ p >
< p >< label > < input type = radio name = size > Large </ label ></ p >
</ fieldset >
< fieldset >
< legend > Pizza Toppings </ legend >
< p >< label > < input type = checkbox > Bacon </ label ></ p >
< p >< label > < input type = checkbox > Extra Cheese </ label ></ p >
< p >< label > < input type = checkbox > Onion </ label ></ p >
< p >< label > < input type = checkbox > Mushroom </ label ></ p >
</ fieldset >
</ form >
このフォームで注文するピザ屋は、いつも間違いをするので、顧客に連絡する方法を必要とする。For this purpose, we can use form controls specifically for telephone numbers (input
elements with their type
attribute set to tel
) and email addresses (input
elements with their type
attribute set to email
):
< form >
< p >< label > Customer name: < input ></ label ></ p >
< p >< label > Telephone: < input type = tel ></ label ></ p >
< p >< label > Email address: < input type = email ></ label ></ p >
< fieldset >
< legend > Pizza Size </ legend >
< p >< label > < input type = radio name = size > Small </ label ></ p >
< p >< label > < input type = radio name = size > Medium </ label ></ p >
< p >< label > < input type = radio name = size > Large </ label ></ p >
</ fieldset >
< fieldset >
< legend > Pizza Toppings </ legend >
< p >< label > < input type = checkbox > Bacon </ label ></ p >
< p >< label > < input type = checkbox > Extra Cheese </ label ></ p >
< p >< label > < input type = checkbox > Onion </ label ></ p >
< p >< label > < input type = checkbox > Mushroom </ label ></ p >
</ fieldset >
</ form >
配達時間を尋ねるためにtime
に設定されたtype
属性にinput
要素を使用できる。フォームコントロールの多くは、値が指定できるものを正確に制御するための属性を持つ。この場合、特に関心のある3つの属性は、min
、max
、およびstep
である。これらは、最小時間、最大時間、及び許可された値の間隔(秒単位で)を設定する。このピザは、午前11時と午後9時の間で配送され、15分刻み以上を約束するものでなく、次のようにマークアップすることができる:
< form >
< p >< label > Customer name: < input ></ label ></ p >
< p >< label > Telephone: < input type = tel ></ label ></ p >
< p >< label > Email address: < input type = email ></ label ></ p >
< fieldset >
< legend > Pizza Size </ legend >
< p >< label > < input type = radio name = size > Small </ label ></ p >
< p >< label > < input type = radio name = size > Medium </ label ></ p >
< p >< label > < input type = radio name = size > Large </ label ></ p >
</ fieldset >
< fieldset >
< legend > Pizza Toppings </ legend >
< p >< label > < input type = checkbox > Bacon </ label ></ p >
< p >< label > < input type = checkbox > Extra Cheese </ label ></ p >
< p >< label > < input type = checkbox > Onion </ label ></ p >
< p >< label > < input type = checkbox > Mushroom </ label ></ p >
</ fieldset >
< p >< label > Preferred delivery time: < input type = time min = "11:00" max = "21:00" step = "900" ></ label ></ p >
</ form >
textarea
要素は、複数行のテキストコントロールを提供するために使用できる。この文脈において、配送指示を与えるために顧客に対してスペースを提供するために要素を使用しようとしている:
< form >
< p >< label > Customer name: < input ></ label ></ p >
< p >< label > Telephone: < input type = tel ></ label ></ p >
< p >< label > Email address: < input type = email ></ label ></ p >
< fieldset >
< legend > Pizza Size </ legend >
< p >< label > < input type = radio name = size > Small </ label ></ p >
< p >< label > < input type = radio name = size > Medium </ label ></ p >
< p >< label > < input type = radio name = size > Large </ label ></ p >
</ fieldset >
< fieldset >
< legend > Pizza Toppings </ legend >
< p >< label > < input type = checkbox > Bacon </ label ></ p >
< p >< label > < input type = checkbox > Extra Cheese </ label ></ p >
< p >< label > < input type = checkbox > Onion </ label ></ p >
< p >< label > < input type = checkbox > Mushroom </ label ></ p >
</ fieldset >
< p >< label > Preferred delivery time: < input type = time min = "11:00" max = "21:00" step = "900" ></ label ></ p >
< p >< label > Delivery instructions: < textarea ></ textarea ></ label ></ p >
</ form >
最後に、フォームを投稿可能にするために、button
要素を使用する:
< form >
< p >< label > Customer name: < input ></ label ></ p >
< p >< label > Telephone: < input type = tel ></ label ></ p >
< p >< label > Email address: < input type = email ></ label ></ p >
< fieldset >
< legend > Pizza Size </ legend >
< p >< label > < input type = radio name = size > Small </ label ></ p >
< p >< label > < input type = radio name = size > Medium </ label ></ p >
< p >< label > < input type = radio name = size > Large </ label ></ p >
</ fieldset >
< fieldset >
< legend > Pizza Toppings </ legend >
< p >< label > < input type = checkbox > Bacon </ label ></ p >
< p >< label > < input type = checkbox > Extra Cheese </ label ></ p >
< p >< label > < input type = checkbox > Onion </ label ></ p >
< p >< label > < input type = checkbox > Mushroom </ label ></ p >
</ fieldset >
< p >< label > Preferred delivery time: < input type = time min = "11:00" max = "21:00" step = "900" ></ label ></ p >
< p >< label > Delivery instructions: < textarea ></ textarea ></ label ></ p >
< p >< button > Submit order</ button ></ p >
</ form >
この節は非規範的である。
サーバー側の処理機構の記述に対する正確な詳細は、この仕様書の範囲外である。この手引きの目的のために、HTTP POSTボディ内で以下のパラメーターが送信されたと期待し、https://pizza.example.com/order.cgi
でスクリプトがapplication/x-www-form-urlencoded
形式を使用して投稿を受け付ける設定がされていると仮定する:
custname
custtel
custemail
size
small
、medium
、またはlarge
のいずれかの、ピザのサイズtopping
bacon
、cheese
、onion
、およびmushroom
をもつ、各選択されたトッピングに対して一度に指定される。delivery
comments
この節は非規範的である。
フォームの送信は、最も一般的なHTTP GETまたはPOSTリクエストとして、種々の方法でサーバーに公開される。使用される正確な方法を指定するために、method
属性はform
要素で指定される。ただし、これはフォームデータがどのようにエンコードされるかを指定しない。指定するためには、enctype
属性を使用する。また、action
属性を使用して、送信されたデータを処理するサービスのURLを指定する必要がある。
提出したい各フォームコントロールについて、提出でのデータを参照するために使用される名前を付ける必要がある。すでに、ラジオボタンのグループの名前を指定している。同じ属性(name
)も提出名を指定する。ラジオボタンはvalue
属性を使用して、それぞれに異なる値を与えることにより提出で互いに区別できる。
複数のコントロールは、同じ名前を持つことができる。たとえば、すべてのチェックボックスに同じ名前を与え、サーバーは、どの値がその名前で提出されたかを見ることによって、どのチェックボックスがチェックされたかを区別する―ラジオボタンのように、これらはまた、value
属性を持つ一意な値を与えられる。
前節の設定を考えれば、次のようになる:
< form method = "post"
enctype = "application/x-www-form-urlencoded"
action = "https://pizza.example.com/order.cgi" >
< p >< label > Customer name: < input name = "custname" ></ label ></ p >
< p >< label > Telephone: < input type = tel name = "custtel" ></ label ></ p >
< p >< label > Email address: < input type = email name = "custemail" ></ label ></ p >
< fieldset >
< legend > Pizza Size </ legend >
< p >< label > < input type = radio name = size value = "small" > Small </ label ></ p >
< p >< label > < input type = radio name = size value = "medium" > Medium </ label ></ p >
< p >< label > < input type = radio name = size value = "large" > Large </ label ></ p >
</ fieldset >
< fieldset >
< legend > Pizza Toppings </ legend >
< p >< label > < input type = checkbox name = "topping" value = "bacon" > Bacon </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "cheese" > Extra Cheese </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "onion" > Onion </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "mushroom" > Mushroom </ label ></ p >
</ fieldset >
< p >< label > Preferred delivery time: < input type = time min = "11:00" max = "21:00" step = "900" name = "delivery" ></ label ></ p >
< p >< label > Delivery instructions: < textarea name = "comments" ></ textarea ></ label ></ p >
< p >< button > Submit order</ button ></ p >
</ form >
属性が引用符で囲まれた値を持ったり囲まれなかったりするが、特に意味はない。構文のセクションで説明されるように、HTML構文は属性を指定するための等価で妥当な様々な方法を可能にする。
For example, if the customer entered "Denise Lawrence" as their name, "555-321-8642" as their telephone number, did not specify an email address, asked for a medium-sized pizza, selected the Extra Cheese and Mushroom toppings, entered a delivery time of 7pm, and left the delivery instructions text control blank, the user agent would submit the following to the online web service:
custname=Denise+Lawrence&custtel=555-321-8642&custemail=&size=medium&topping=cheese&topping=mushroom&delivery=19%3A00&comments=
Support in all current engines.
この節は非規範的である。
フォームは、フォームが送信される前に、どのようにユーザーエージェントがユーザーの入力をチェックするかのような注釈を付けることができる。(悪意あるユーザーが簡単にフォームの検証を迂回することができるので)サーバーは依然として入力が妥当であることを確認する必要があるが、ユーザーは、ユーザーの入力の独占的なチェッカーであるサーバーを持つことによって発生した待ち時間を回避できる。
最も簡単な注釈は、値が指定されるまでフォームが送信されないことを示すためにinput
要素で指定できる、required
属性である。顧客の名前と配達時間のフィールドにこの属性を追加することによって、ユーザーがフィールドに入力せずにフォームを送信する際に、ユーザーエージェントはユーザーに通知できる:
< form method = "post"
enctype = "application/x-www-form-urlencoded"
action = "https://pizza.example.com/order.cgi" >
< p >< label > Customer name: < input name = "custname" required ></ label ></ p >
< p >< label > Telephone: < input type = tel name = "custtel" ></ label ></ p >
< p >< label > Email address: < input type = email name = "custemail" ></ label ></ p >
< fieldset >
< legend > Pizza Size </ legend >
< p >< label > < input type = radio name = size required value = "small" > Small </ label ></ p >
< p >< label > < input type = radio name = size required value = "medium" > Medium </ label ></ p >
< p >< label > < input type = radio name = size required value = "large" > Large </ label ></ p >
</ fieldset >
< fieldset >
< legend > Pizza Toppings </ legend >
< p >< label > < input type = checkbox name = "topping" value = "bacon" > Bacon </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "cheese" > Extra Cheese </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "onion" > Onion </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "mushroom" > Mushroom </ label ></ p >
</ fieldset >
< p >< label > Preferred delivery time: < input type = time min = "11:00" max = "21:00" step = "900" name = "delivery" required ></ label ></ p >
< p >< label > Delivery instructions: < textarea name = "comments" ></ textarea ></ label ></ p >
< p >< button > Submit order</ button ></ p >
</ form >
maxlength
属性を使用して、入力の長さを制限することも可能である。textarea
要素にこれを追加することによって、ユーザーに1000文字の制限ができ、焦点を合わせて留まる代わりに忙しい配送ドライバーに対してユーザーが巨大なエッセイを書かないようにする。
< form method = "post"
enctype = "application/x-www-form-urlencoded"
action = "https://pizza.example.com/order.cgi" >
< p >< label > Customer name: < input name = "custname" required ></ label ></ p >
< p >< label > Telephone: < input type = tel name = "custtel" ></ label ></ p >
< p >< label > Email address: < input type = email name = "custemail" ></ label ></ p >
< fieldset >
< legend > Pizza Size </ legend >
< p >< label > < input type = radio name = size required value = "small" > Small </ label ></ p >
< p >< label > < input type = radio name = size required value = "medium" > Medium </ label ></ p >
< p >< label > < input type = radio name = size required value = "large" > Large </ label ></ p >
</ fieldset >
< fieldset >
< legend > Pizza Toppings </ legend >
< p >< label > < input type = checkbox name = "topping" value = "bacon" > Bacon </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "cheese" > Extra Cheese </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "onion" > Onion </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "mushroom" > Mushroom </ label ></ p >
</ fieldset >
< p >< label > Preferred delivery time: < input type = time min = "11:00" max = "21:00" step = "900" name = "delivery" required ></ label ></ p >
< p >< label > Delivery instructions: < textarea name = "comments" maxlength = 1000 ></ textarea ></ label ></ p >
< p >< button > Submit order</ button ></ p >
</ form >
When a form is submitted, invalid
events are fired at each form control that is invalid. 典型的にブラウザー自体は一度に一つの問題を報告するので、これはフォームに関する問題の要約を表示するために有用でありうる。
この節は非規範的である。
一部のブラウザーは、ユーザーに情報を毎回再入力させるのではなく、フォームコントロールを自動的に埋めることでユーザーを支援しようとする。たとえば、ユーザーの電話番号を要求するフィールドは、自動的にユーザーの電話番号を埋めることができる。
これとともにユーザーエージェントを助けるために、autocomplete
属性はフィールドの目的を説明するために使用できる。次のフォームの場合、誰がピザに配信されるかに関する情報について、このように有用な注釈を付けることができる3つのフィールドを持つ。この情報を追加すると、次のようになる:
< form method = "post"
enctype = "application/x-www-form-urlencoded"
action = "https://pizza.example.com/order.cgi" >
< p >< label > Customer name: < input name = "custname" required autocomplete = "shipping name" ></ label ></ p >
< p >< label > Telephone: < input type = tel name = "custtel" autocomplete = "shipping tel" ></ label ></ p >
< p >< label > Email address: < input type = email name = "custemail" autocomplete = "shipping email" ></ label ></ p >
< fieldset >
< legend > Pizza Size </ legend >
< p >< label > < input type = radio name = size required value = "small" > Small </ label ></ p >
< p >< label > < input type = radio name = size required value = "medium" > Medium </ label ></ p >
< p >< label > < input type = radio name = size required value = "large" > Large </ label ></ p >
</ fieldset >
< fieldset >
< legend > Pizza Toppings </ legend >
< p >< label > < input type = checkbox name = "topping" value = "bacon" > Bacon </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "cheese" > Extra Cheese </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "onion" > Onion </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "mushroom" > Mushroom </ label ></ p >
</ fieldset >
< p >< label > Preferred delivery time: < input type = time min = "11:00" max = "21:00" step = "900" name = "delivery" required ></ label ></ p >
< p >< label > Delivery instructions: < textarea name = "comments" maxlength = 1000 ></ textarea ></ label ></ p >
< p >< button > Submit order</ button ></ p >
</ form >
この節は非規範的である。
一部のデバイス、特に仮想キーボードを備えたデバイスは、複数の入力モダリティーをユーザーに提供することができる。たとえば、自分の名前を入力する際に、デフォルトで各単語を大文字にするフォームフィールドを見たいかもしれない一方で、クレジットカードの番号を入力する際にユーザーは0~9の数字キーのみを表示したいかもしれない。
適切な入力モダリティーを選択できるinputmode
属性を使用する:
< form method = "post"
enctype = "application/x-www-form-urlencoded"
action = "https://pizza.example.com/order.cgi" >
< p >< label > Customer name: < input name = "custname" required autocomplete = "shipping name" ></ label ></ p >
< p >< label > Telephone: < input type = tel name = "custtel" autocomplete = "shipping tel" ></ label ></ p >
< p >< label > Buzzer code: < input name = "custbuzz" inputmode = "numeric" ></ label ></ p >
< p >< label > Email address: < input type = email name = "custemail" autocomplete = "shipping email" ></ label ></ p >
< fieldset >
< legend > Pizza Size </ legend >
< p >< label > < input type = radio name = size required value = "small" > Small </ label ></ p >
< p >< label > < input type = radio name = size required value = "medium" > Medium </ label ></ p >
< p >< label > < input type = radio name = size required value = "large" > Large </ label ></ p >
</ fieldset >
< fieldset >
< legend > Pizza Toppings </ legend >
< p >< label > < input type = checkbox name = "topping" value = "bacon" > Bacon </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "cheese" > Extra Cheese </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "onion" > Onion </ label ></ p >
< p >< label > < input type = checkbox name = "topping" value = "mushroom" > Mushroom </ label ></ p >
</ fieldset >
< p >< label > Preferred delivery time: < input type = time min = "11:00" max = "21:00" step = "900" name = "delivery" required ></ label ></ p >
< p >< label > Delivery instructions: < textarea name = "comments" maxlength = 1000 ></ textarea ></ label ></ p >
< p >< button > Submit order</ button ></ p >
</ form >
この節は非規範的である。
type
、autocomplete
、およびinputmode
は、紛らわしいほど酷似しているように見えるだろう。たとえば、3つすべての場合において文字列"email
"は妥当な値である。このセクションでは、3つの属性の違いについて説明を試み、どのように属性を使用するかを提案する助言を提供する。
input
要素のtype
属性は、ユーザーエージェントがフィールドを公開するために使用するコントロールの種類を決定する。この属性に属する異なる値の間の選択は、input
要素、textarea
要素、select
要素などを使用するかどうかを選択するのと同じ選択肢である。
対照的にautocomplete
属性は、ユーザーが実際に入力する値が何を表すかを記載する。この属性の異なる値の間で選択は、要素のラベルがどのようなものかを選択するのと同じ選択肢である。
まず、電話番号を考えてみよう。ページがユーザーから電話番号を求める場合、適切な使用すべきフォームコントロールは<input type=tel>
である。しかし、どのautocomplete
値を使用べきかは、ユーザーが国際形式または単にローカル形式の電話番号を期待するかどうかなど、ページがどの電話番号を求めるかに依存する。
たとえば、友人に出荷するギフトを購入する顧客に対してeコマースサイトで検査プロセスの一部を構成するページは、購入者の電話番号(支払いの問題の場合)と友人の電話番号(配達の問題の場合)の両方を必要とするかもしれない。サイトが(国コードプレフィックスを持つ)国際電話番号想定する場合、これはこのようになる:
< p >< label > Your phone number: < input type = tel name = custtel autocomplete = "billing tel" ></ label >
< p >< label > Recipient's phone number: < input type = tel name = shiptel autocomplete = "shipping tel" ></ label >
< p > Please enter complete phone numbers including the country code prefix, as in "+1 555 123 4567".
しかし、サイトがイギリスの顧客や受信者のみをサポートする場合、代わりに次のようになるだろう(tel
よりもむしろtel-national
の仕様に注意する):
< p >< label > Your phone number: < input type = tel name = custtel autocomplete = "billing tel-national" ></ label >
< p >< label > Recipient's phone number: < input type = tel name = shiptel autocomplete = "shipping tel-national" ></ label >
< p > Please enter complete UK phone numbers, as in "(01632) 960 123".
さて、ある人の優先言語を考えてみよう。正確なautocomplete
値はlanguage
である。しかし、目的に対して使用される異なるフォームコントロールが多数あるかもしれない:テキストコントロール(<input type=text>
)、ドロップダウンリスト(<select>
)、ラジオボタン(<input type=radio>
)など。これは、どの種類のインターフェイスが望まれているかのみに依存する。
Finally, consider names. ページが単にユーザーから1つ名前を望む場合、該当するコントロールは<input type=text>
である。ページがユーザーのフルネームを求めている場合、該当するautocomplete
値はname
である。
< p >< label > Japanese name: < input name = "j" type = "text" autocomplete = "section-jp name" ></ label >
< label > Romanized name: < input name = "e" type = "text" autocomplete = "section-en name" ></ label >
この例で、autocomplete
属性値における"section-*
"キーワードは、2つのフィールドが別の名前を期待することをユーザーエージェントに知らせる。キーワードなしで、ユーザーが最初のフィールドに値を与える際に、ユーザーエージェントは、最初のフィールドで与えられた値とともに2番目のフィールドを自動的に埋めることができる。
キーワードの"-jp
"および"-en
"部分は、ユーザーエージェントに対して不明瞭である。キーワードからユーザーエージェントは、2つの名前がそれぞれ日本語とおよび英語であることを期待されていると推測できない。
type
およびautocomplete
に関する選択肢とは別に、inputmode
属性は、コントロールがテキストコントロールであるときに、どのような種類の入力モダリティー(たとえば、仮想キーボード)を使用するかを決定する。
クレジットカードの番号を考えてみよう。以下で説明するように、適切な入力タイプは<input type=number>
ではない。代わりに<input type=text>
となる。とにかく数字入力モダリティー(たとえば、数字のみを表示する仮想キーボード)を使用するようにユーザーエージェントに促すために、ページでは次のように使用する
< p >< label > Credit card number:
< input name = "cc" type = "text" inputmode = "numeric" pattern = "[0-9]{8,19}" autocomplete = "cc-number" >
</ label ></ p >
この節は非規範的である。
このピザ配達の例において、時刻は、24時間形式で2桁の時間と2桁の分、形式"HH:MM"で指定される。(この例において必要ないが、秒もまた指定できる。)
しかし、ユーザーに提示される際、一部のロケールにおいて、時刻はしばしば異なった表現がなされる。たとえば、アメリカでは"2pm"のように、am/pm表示付きの12時間制を使用するのが一般的である。フランスでは"14h00"のように、"h"の文字を用いて時間と分を分離するのが一般的である。
コンポーネントの順序が常に一貫しないような複雑な関係を付加されるとともに、日付に同様の問題が存在する―たとえば、キプロスで2003年2月1日は一般に"1/2/03"と書かれ、一方で日本において同じ日付は一般に"2003年02月01日"のように書かれるだろう―数字と平行して、たとえば、どのような句読点が小数点記号や桁区切り記号として使用されるという点でロケールが異なる。
したがって、ブラウザーでユーザーに提示され、ブラウザーでユーザーからの入力として受け入れられる時刻、日付、および数値形式から、常に形式がこの仕様で定義される(およびコンピューター可読の日付と時刻の形式に対して十分に確立されたISO 8601規格に基づく)場合、HTMLとフォームの送信で使用される時刻、日付、および数値形式を区別することが重要である。
The format used "on the wire", i.e., in HTML markup and in form submissions, is intended to be computer-readable and consistent irrespective of the user's locale. たとえば、日付は常に"2003-02-01"のように、形式"YYYY-MM-DD"で記述される。While some users might see this format, others might see it as "01.02.2003" or "February 1, 2003".
時刻、日付、またはワイヤ形式でページによって与えられた数字は、ユーザーに表示される前に、(ユーザー設定に基づくか、ページ自身のロケールに基づいて)ユーザーの好みの表現に変換される。同様に、ユーザーは、好みの形式を使用して、時刻、日付、または数値の入力する後に、ユーザーエージェントは、DOMに入れるまたは送信する前に、ワイヤ形式に戻って変換する。
依然としてユーザーのニーズをサポートする一方で、これは、ページ内やサーバー上のスクリプトに、多数の異なるフォーマットをサポートする必要なしに、一貫性のある方法で、時刻、日付、および数値を処理できる。
See also the implementation notes regarding localization of form controls.
多くの歴史的な理由のために、この節における要素は、フローコンテンツ、フレージングコンテンツ、およびインタラクティブコンテンツのように通常のものに加えて、複数の(しかし微妙に異なる)カテゴリーが重複して分類される。
要素の数は、フォーム所有者を持つことができることを意味する、フォーム関連要素である。
フォーム関連要素は、複数のサブカテゴリーに分類される:
form.elements
とfieldset.elements
APIに記載される要素を表す。この要素はまた、form
コンテンツ属性、および著者が明示的にフォーム所有者を指定するのを可能にする、一致するform
IDL属性を持つ。
form
要素が送信されたときにエントリーリストを構築するために用いることのできる要素を示す。
一部の送信可能要素は、その属性ボタンに応じて存在できる。要素がボタンである場合、以下の文が定義される。一部のボタンは、特に送信ボタンである。
Denotes elements that inherit the autocapitalize
and autocorrect
attributes from their form owner.
フォーム関連のすべてでなく、一部の要素がラベル付け可能要素として分類される。これは、label
要素に関連付けることができる要素である。
form
elementSupport in all current engines.
Support in all current engines.
form
要素の子孫を除く。accept-charset
— フォーム送信に使用する文字エンコーディングaction
— フォーム送信に使用するURLautocomplete
— フォーム内のコントロールのオールフィル機能に対するデフォルト設定enctype
— Entry list encoding type to use for form submissionmethod
— フォーム送信に使用する変形name
— document.forms
APIで使用するためのフォーム名novalidate
— フォーム送信のためのフォームコントロール検証を回避するtarget
— Navigable for form submissionrel
[Exposed =Window ,
LegacyOverrideBuiltIns ,
LegacyUnenumerableNamedProperties ]
interface HTMLFormElement : HTMLElement {
[HTMLConstructor ] constructor ();
[CEReactions ] attribute DOMString acceptCharset ;
[CEReactions ] attribute USVString action ;
[CEReactions ] attribute DOMString autocomplete ;
[CEReactions ] attribute DOMString enctype ;
[CEReactions ] attribute DOMString encoding ;
[CEReactions ] attribute DOMString method ;
[CEReactions ] attribute DOMString name ;
[CEReactions ] attribute boolean noValidate ;
[CEReactions ] attribute DOMString target ;
[CEReactions ] attribute DOMString rel ;
[SameObject , PutForwards =value ] readonly attribute DOMTokenList relList ;
[SameObject ] readonly attribute HTMLFormControlsCollection elements ;
readonly attribute unsigned long length ;
getter Element (unsigned long index );
getter (RadioNodeList or Element ) (DOMString name );
undefined submit ();
undefined requestSubmit (optional HTMLElement ? submitter = null );
[CEReactions ] undefined reset ();
boolean checkValidity ();
boolean reportValidity ();
};
form
要素は、フォーム関連要素のコレクションを通して操作することができるハイパーリンクを表す。そのフォーム関連要素の一部は、処理のためにサーバーに送信できる編集可能な値を表すことができる。
accept-charset
属性は送信に対して使用される文字エンコーディングを提供する。属性が存在する場合、その値は"UTF-8
"にマッチするASCII大文字・小文字不区別でなければならない。[ENCODING]
name
属性はforms
コレクション内のform
の名前を表す。値は空文字列であってはならず、いかなる場合も、値はforms
コレクションのform
要素の中で一意でなければならない。
The autocomplete
attribute is an enumerated attribute with the following keywords and states:
キーワード | 状態 | 概要 |
---|---|---|
on | on | Form controls will have their autofill field name set to "on " by default. |
off | off | Form controls will have their autofill field name set to "off " by default. |
The attribute's missing value default and invalid value default are both the on state.
action
、enctype
、method
、novalidate
、およびtarget
属性はフォーム送信に対する属性である。
form
要素のrel
属性は、要素が作成するリンクの種類を制御する。その属性値は、スペース区切りのトークンの順不同セットでなければならない。許可されたキーワードとその意味は、後の節で定義される。
rel
のサポートされるトークンは、form
要素で許可されるHTMLリンクタイプで定義されるキーワードであり、処理モデルに影響を与え、ユーザーエージェントによってサポートされる。可能なサポートトークンは、noreferrer
、noopener
、opener
である。rel
のサポートされるトークンは、ユーザーエージェントが処理モデルを実装する、このリスト由来のトークンのみを含めなければならない。
form.elements
Support in all current engines.
(歴史的な理由でイメージボタンを除く)フォームにおけるフォームコントロールのHTMLFormControlsCollection
を返す。
form.length
Support in all current engines.
(歴史的な理由でイメージボタンを除く)フォームにおけるフォームコントロールの数を返す。
form[index]
(歴史的な理由でイメージボタンを除く)フォームでindex番目の要素を返す。
form[name]
指定したIDまたはname
(歴史的な理由でイメージボタンを除く)をもつフォームでフォームコントロール(または複数存在する場合、フォームコントロールのRadioNodeList
)を返す。または、いずれも存在しない場合、与えられたIDとともにimg
要素を返す。
一度要素が特定の名前を使用して参照されると、たとえ要素の実際のIDまたはname
を変更しても、要素がツリーに残る限り、その名前は、この方法でその要素を参照する方法として利用され続ける。
複数のマッチするアイテムが存在する場合、それらの要素すべてを含むRadioNodeList
オブジェクトが返される。
form.submit()
Support in all current engines.
Submits the form, bypassing interactive constraint validation and without firing a submit
event.
form.requestSubmit([ submitter ])
Support in all current engines.
Requests to submit the form. Unlike submit()
, this method includes interactive constraint validation and firing a submit
event, either of which can cancel submission.
The submitter argument can be used to point to a specific submit button, whose formaction
, formenctype
, formmethod
, formnovalidate
, and formtarget
attributes can impact submission. Additionally, the submitter will be included when constructing the entry list for submission; normally, buttons are excluded.
form.reset()
Support in all current engines.
フォームをリセットする。
form.checkValidity()
フォームのコントロールがすべて有効である場合はtrueを返す。そうでなければfalseを返す。
form.reportValidity()
フォームのコントロールがすべて有効である場合はtrueを返す。そうでなければfalseを返す。
autocomplete
IDL属性は、既知の値に制限され、同じ名前のコンテンツ属性を反映しなければならない。
Support in all current engines.
The name
and rel
IDL attributes must reflect the content attribute of the same name.
Support in all current engines.
acceptCharset
IDL属性は、accept-charset
コンテンツ属性を反映しなければならない。
The relList
IDL attribute must reflect the rel
content attribute.
The elements
IDL attribute must return an HTMLFormControlsCollection
rooted at the form
element's root, whose filter matches listed elements whose form owner is the form
element, with the exception of input
elements whose type
attribute is in the Image Button state, which must, for historical reasons, be excluded from this particular collection.
The length
IDL attribute must return the number of nodes represented by the elements
collection.
The supported property indices at any instant are the indices supported by the object returned by the elements
attribute at that instant.
To determine the value of an indexed property for a form
element, the user agent must return the value returned by the item
method on the elements
collection, when invoked with the given index as its argument.
Each form
element has a mapping of names to elements called the past names map. It is used to persist names of controls even when they change names.
The supported property names consist of the names obtained from the following algorithm, in the order obtained from this algorithm:
Let sourced names be an initially empty ordered list of tuples consisting of a string, an element, a source, where the source is either id, name, or past, and, if the source is past, an age.
For each listed element candidate whose form owner is the form
element, with the exception of any input
elements whose type
attribute is in the Image Button state:
If candidate has an id
attribute, add an entry to sourced names with that id
attribute's value as the string, candidate as the element, and id as the source.
If candidate has a name
attribute, add an entry to sourced names with that name
attribute's value as the string, candidate as the element, and name as the source.
For each img
element candidate whose form owner is the form
element:
If candidate has an id
attribute, add an entry to sourced names with that id
attribute's value as the string, candidate as the element, and id as the source.
If candidate has a name
attribute, add an entry to sourced names with that name
attribute's value as the string, candidate as the element, and name as the source.
For each entry past entry in the past names map, add an entry to sourced names with the past entry's name as the string, past entry's element as the element, past as the source, and the length of time past entry has been in the past names map as the age.
Sort sourced names by tree order of the element entry of each tuple, sorting entries with the same element by putting entries whose source is id first, then entries whose source is name, and finally entries whose source is past, and sorting entries with the same element and source by their age, oldest first.
Remove any entries in sourced names that have the empty string as their name.
Remove any entries in sourced names that have the same name as an earlier entry in the map.
Return the list of names from sourced names, maintaining their relative order.
To determine the value of a named property name for a form
element, the user agent must run the following steps:
Let candidates be a live RadioNodeList
object containing all the listed elements, whose form owner is the form
element, that have either an id
attribute or a name
attribute equal to name, with the exception of input
elements whose type
attribute is in the Image Button state, in tree order.
If candidates is empty, let candidates be a live RadioNodeList
object containing all the img
elements, whose form owner is the form
element, that have either an id
attribute or a name
attribute equal to name, in tree order.
If candidates is empty, name is the name of one of the entries in the form
element's past names map: return the object associated with name in that map.
If candidates contains more than one node, return candidates.
Otherwise, candidates contains exactly one node. Add a mapping from name to the node in candidates in the form
element's past names map, replacing the previous entry with the same name, if any.
Return the node in candidates.
If an element listed in a form
element's past names map changes form owner, then its entries must be removed from that map.
The submit()
method steps are to submit this from this, with submitted from submit()
method set to true.
The requestSubmit(submitter)
method, when invoked, must run the following steps:
If submitter is not null, then:
If submitter is not a submit button, then throw a TypeError
.
If submitter's form owner is not this form
element, then throw a "NotFoundError
" DOMException
.
Otherwise, set submitter to this form
element.
The reset()
method, when invoked, must run the following steps:
If the form
element is marked as locked for reset, then return.
Mark the form
element as locked for reset.
Unmark the form
element as locked for reset.
If the checkValidity()
method is invoked, the user agent must statically validate the constraints of the form
element, and return true if the constraint validation return a positive result, and false if it returned a negative result.
If the reportValidity()
method is invoked, the user agent must interactively validate the constraints of the form
element, and return true if the constraint validation return a positive result, and false if it returned a negative result.
この例は、2つの検索フォームを示す:
< form action = "https://www.google.com/search" method = "get" >
< label > Google: < input type = "search" name = "q" ></ label > < input type = "submit" value = "Search..." >
</ form >
< form action = "https://www.bing.com/search" method = "get" >
< label > Bing: < input type = "search" name = "q" ></ label > < input type = "submit" value = "Search..." >
</ form >
label
elementSupport in all current engines.
Support in all current engines.
label
要素でないを除く。for
— フォームコントロールとラベルを関連付ける[Exposed =Window ]
interface HTMLLabelElement : HTMLElement {
[HTMLConstructor ] constructor ();
readonly attribute HTMLFormElement ? form ;
[CEReactions ] attribute DOMString htmlFor ;
readonly attribute HTMLElement ? control ;
};
label
は、ユーザーインターフェイスでのキャプションを表す。キャプションは、for
属性を使用する、またはlabel
要素自身の内部にフォームコントロールを設置することによってのいずれかで、label
要素のラベル付けされたコントロールとして知られる特定のフォームコントロールに関連付けることができる。
Except where otherwise specified by the following rules, a label
element has no labeled control.
Support in all current engines.
for
属性は、キャプションが関連付けされることになっているフォームコントロールを示すために指定されてもよい。この属性が指定される場合、属性値は、label
要素と同じツリーでラベル付け可能要素のIDでなければならない。この属性が指定され、かつfor
属性の値と同じツリーのIDで要素が存在し、かつツリー順でそのような要素の最初がラベル付け可能な要素である場合、その要素はlabel
要素のラベル付けされたコントロールである。
If the for
attribute is not specified, but the label
element has a labelable element descendant, then the first such descendant in tree order is the label
element's labeled control.
The label
element's exact default presentation and behavior, in particular what its activation behavior might be, if anything, should match the platform's label behavior. The activation behavior of a label
element for events targeted at interactive content descendants of a label
element, and any descendants of those interactive content descendants, must be to do nothing.
Form-associated custom elements are labelable elements, so for user agents where the label
element's activation behavior impacts the labeled control, both built-in and custom elements will be impacted.
For example, on platforms where clicking a label activates the form control, clicking the label
in the following snippet could trigger the user agent to fire a click
event at the input
element, as if the element itself had been triggered by the user:
< label >< input type = checkbox name = lost > Lost</ label >
Similarly, assuming my-checkbox
was declared as a form-associated custom element (like in this example), then the code
< label >< my-checkbox name = lost ></ my-checkbox > Lost</ label >
would have the same behavior, firing a click
event at the my-checkbox
element.
On other platforms, the behavior in both cases might be just to focus the control, or to do nothing.
次の例は、ラベルを伴う3つのフォームコントロールであり、そのうちの2つが使用するユーザーに対して適切なフォーマットを示す小さなテキストを持つことを示す。
< p >< label > Full name: < input name = fn > < small > Format: First Last</ small ></ label ></ p >
< p >< label > Age: < input name = age type = number min = 0 ></ label ></ p >
< p >< label > Post code: < input name = pc > < small > Format: AB12 3CD</ small ></ label ></ p >
label.control
Support in all current engines.
この要素に関連付けられるフォームコントロールを返す。
label.form
Support in all current engines.
この要素に関連付けられるフォームコントロールのフォーム所有者を返す。
存在しない場合nullを返す。
Support in all current engines.
htmlFor
IDL属性は、for
コンテンツ属性を反映しなければならない。
The control
IDL attribute must return the label
element's labeled control, if any, or null if there isn't one.
The form
IDL attribute must run the following steps:
If the label
element has no labeled control, then return null.
If the label
element's labeled control is not a form-associated element, then return null.
Return the label
element's labeled control's form owner (which can still be null).
label
要素のform
IDL属性は、リストされたフォーム関連要素のform
IDL属性とは異なり、label
要素はform
コンテンツ属性を持たない。
control.labels
Support in all current engines.
Support in all current engines.
Support in all current engines.
Support in all current engines.
Support in all current engines.
Support in all current engines.
Support in all current engines.
Labelable elements and all input
elements have a live NodeList
object associated with them that represents the list of label
elements, in tree order, whose labeled control is the element in question. The labels
IDL attribute of labelable elements that are not form-associated custom elements, and the labels
IDL attribute of input
elements, on getting, must return that NodeList
object, and that same value must always be returned, unless this element is an input
element whose type
attribute is in the state, in which case it must instead return null.
Support in all current engines.
Form-associated custom elements don't have a labels
IDL attribute. Instead, their ElementInternals
object has a labels
IDL attribute. On getting, it must throw a "NotSupportedError
" DOMException
if the target element is not a form-associated custom element. Otherwise, it must return that NodeList
object, and that same value must always be returned.
This (non-conforming) example shows what happens to the NodeList
and what labels
returns when an input
element has its type
attribute changed.
<!doctype html>
< p >< label >< input ></ label ></ p >
< script >
const input = document. querySelector( 'input' );
const labels = input. labels;
console. assert( labels. length === 1 );
input. type = 'hidden' ;
console. assert( labels. length === 0 ); // the input is no longer the label's labeled control
console. assert( input. labels === null );
input. type = 'checkbox' ;
console. assert( labels. length === 1 ); // the input is once again the label's labeled control
console. assert( input. labels === labels); // same value as returned originally
</ script >