Edition for Web Developers — Last Updated 17 December 2024
Support in all current engines.
フォームは、テキスト、ボタン、チェックボックス、レンジ、またはカラーピッカーコントロールなど、フォームコントロールを持つウェブページのコンポーネントである。さらなる処理(たとえば、検索または計算結果を返す)に対してサーバーに送信できるデータを提供して、ユーザーはそのようなフォームで情報を交換できる。スクリプトがユーザーエクスペリエンスを補強するか、またはサーバーにデータを送信する以外の意義に対してフォームを使用できるようなAPIが利用可能であるが、多くの場合クライアント側のスクリプトは必要ない。
フォームの記述は、ユーザーインターフェイスを記述する、サーバー側の処理を実装する、そのサーバーと通信するためのユーザーインターフェイスを構成するという、任意の順序で実行される複数のステップから成る。
この簡単な手引きの目的に対して、ピザを注文するフォームを作成する。
すべてのフォームは、内部にコントロールを配置されたform
要素で始まる。ほとんどのコントロールは、デフォルトでテキストコントロールを提供するinput
要素によって表される。コントロールをラベル付けするために、label
要素が使用される。ラベルテキストおよびコントロール自身は、label
要素の中に入る。フォームの各部分は段落とみなされ、通常はp
要素を使用して他の部分から分離される。これを一緒に置くと、これは顧客の名前を尋ねることができる方法の1つである:
< 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 >
このフォームで注文するピザ屋は、いつも間違いをするので、顧客に連絡する方法を必要とする。この目的のために、電話番号(tel
に設定されたtype
属性をもつinput
要素)、および電子メールアドレス(email
に設定されたtype
属性をもつinput
要素)に対してフォームコントロールを特別に使用できる:
< 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構文は属性を指定するための等価で妥当な様々な方法を可能にする。
たとえば、顧客が自分の名前として"Denise Lawrence"、電話番号として"555-321-8642"と入力し、電子メールアドレスを指定せず、中型ピザを求め、追加でチーズとキノコのトッピングを選択し、午後7時の配達時間を入力し、配送指示のテキストフィールドを空白のままにした場合、ユーザーエージェントは、オンラインウェブサービスに以下を送信するだろう:
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 >
フォームが送信されるとき、invalid
イベントが無効なフォームコントロールごとに発火する。典型的にブラウザー自体は一度に1つの問題を報告するので、これはフォームに関する問題の要約を表示するために有用でありうる。
一部のブラウザーは、ユーザーに情報を毎回再入力させるのではなく、フォームコントロールを自動的に埋めることでユーザーを支援しようとする。たとえば、ユーザーの電話番号を要求するフィールドは、自動的にユーザーの電話番号を埋めることができる。
これとともにユーザーエージェントを助けるために、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>
)など。これは、どの種類のインターフェイスが望まれているかのみに依存する。
最後に、名前を考える。ページが単にユーザーから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とフォームの送信で使用される時刻、日付、および数値形式を区別することが重要である。
"オンラインで"使用されるフォーマット、すなわち、HTMLマークアップおよびフォーム送信では、ユーザーのロケールに関係なく、コンピューターで読み取り可能で一貫性があるように意図されている。たとえば、日付は常に"2003-02-01"のように、形式"YYYY-MM-DD"で記述される。この形式を表示するユーザーもいるが、"01.02.2003"や"February 1, 2003"と表示するユーザーもいる。
時刻、日付、またはワイヤ形式でページによって与えられた数字は、ユーザーに表示される前に、(ユーザー設定に基づくか、ページ自身のロケールに基づいて)ユーザーの好みの表現に変換される。同様に、ユーザーは、好みの形式を使用して、時刻、日付、または数値の入力する後に、ユーザーエージェントは、DOMに入れるまたは送信する前に、ワイヤ形式に戻って変換する。
依然としてユーザーのニーズをサポートする一方で、これは、ページ内やサーバー上のスクリプトに、多数の異なるフォーマットをサポートする必要なしに、一貫性のある方法で、時刻、日付、および数値を処理できる。
多くの歴史的な理由のために、この節における要素は、フローコンテンツ、フレージングコンテンツ、およびインタラクティブコンテンツのように通常のものに加えて、複数の(しかし微妙に異なる)カテゴリーが重複して分類される。
いくつかの要素は、フォームに関連付けられた要素であり、これはフォーム所有者を持つことができることを意味する。
フォームに関連付けられた要素は、複数のサブカテゴリーに分類される:
form.elements
とfieldset.elements
APIに記載される要素を表す。この要素はまた、form
コンテンツ属性、および著者が明示的にフォーム所有者を指定するのを可能にする、一致するform
IDL属性を持つ。
form
要素が送信されたときにエントリーリストを構築するために用いることのできる要素を示す。
一部の送信可能要素は、その属性に応じて、ボタンになるものもある。以下の文は、要素がボタンである場合を定義する。一部のボタンは、特に送信ボタンである。
form
要素がリセットされるときに影響を受けるだろう要素を示す。
Denotes elements that inherit the autocapitalize
and autocorrect
attributes from their form owner.
フォーム関連要素のすべてではないが、それら要素の中にはラベル付け可能要素として分類されるものがある。これは、label
要素に関連付けることができる要素である。
form
要素Support in all current engines.
form
要素の子孫を除く。accept-charset
— フォーム送信に使用する文字エンコーディングaction
— フォーム送信に使用するURLautocomplete
— フォーム内のコントロールのオールフィル機能に対するデフォルト設定enctype
— フォーム送信に使用するエントリーリストのエンコーディングタイプmethod
— フォーム送信に使用する変形name
— document.forms
APIで使用するためのフォーム名novalidate
— フォーム送信のためのフォームコントロール検証を回避するtarget
— フォーム送信に対するナビゲート可能rel
HTMLFormElement
を使用する。form
要素は、フォームに関連付けられた要素のコレクションを通して操作することができるハイパーリンクを表す。そのフォームに関連付けられた要素の一部は、処理のためにサーバーに送信できる編集可能な値を表すことができる。
accept-charset
属性は送信に対して使用される文字エンコーディングを提供する。属性が存在する場合、その値は"UTF-8
"に一致するASCII大文字・小文字不区別でなければならない。[ENCODING]
name
属性はforms
コレクション内のform
の名前を表す。値は空文字列であってはならず、いかなる場合も、値はforms
コレクションのform
要素の中で一意でなければならない。
autocomplete
属性は、次のキーワードと状態を持つ列挙属性である:
キーワード | 状態 | 概要 |
---|---|---|
on | on | フォームコントロールの オートフィルフィールド名は、デフォルトで"on "に設定される。 |
off | off | フォームコントロールの オートフィルフィールド名は、デフォルトで"off "に設定される。 |
この属性の欠損値のデフォルトと不正値のデフォルトは、両方ともo状態である。
action
、enctype
、method
、novalidate
、およびtarget
属性はフォーム送信に対する属性である。
form
要素のrel
属性は、要素が作成するリンクの種類を制御する。その属性値は、順不同の一意な空白区切りトークンの集合でなければならない。許可されたキーワードとその意味は、後の節で定義される。
rel
のサポートされるトークンは、form
要素で許可されるHTMLリンクタイプで定義されるキーワードであり、処理モデルに影響を与え、ユーザーエージェントによってサポートされる。可能なサポートトークンは、noreferrer
、noopener
、opener
である。rel
のサポートされるトークンは、ユーザーエージェントが処理モデルを実装する、このリスト由来のトークンのみを含めなければならない。
form.elements
(歴史的な理由でイメージボタンを除く)フォームにおけるフォームコントロールのHTMLFormControlsCollection
を返す。
form.length
(歴史的な理由でイメージボタンを除く)フォームにおけるフォームコントロールの数を返す。
form[index]
(歴史的な理由でイメージボタンを除く)フォームでindex番目の要素を返す。
form[name]
指定したIDまたはname
(歴史的な理由でイメージボタンを除く)をもつフォームでフォームコントロール(または複数存在する場合、フォームコントロールのRadioNodeList
)を返す。または、いずれも存在しない場合、与えられたIDとともにimg
要素を返す。
一度要素が特定の名前を使用して参照されると、たとえ要素の実際のIDまたはname
を変更しても、要素がツリーに残る限り、その名前は、この方法でその要素を参照する方法として利用され続ける。
複数のマッチするアイテムが存在する場合、それらの要素すべてを含むRadioNodeList
オブジェクトが返される。
form.submit()
対話的な制約検証をバイパスし、submit
イベントを発火せずにフォームを送信する。
form.requestSubmit([ submitter ])
フォームの送信を要求する。submit()
とは異なり、このメソッドには、対話的な制約検証とsubmit
イベントの発火が含まれ、いずれも送信をキャンセルできる。
submitter引数は、formaction
、formenctype
、formmethod
、formnovalidate
、およびformtarget
属性が送信に影響を与える可能性がある特定の送信ボタンを指すために使用できる。さらに、送信用のエントリーリストを作成するときに送信者が含まれる。通常、ボタンは除外される。
form.reset()
フォームをリセットする。
form.checkValidity()
フォームのコントロールがすべて有効である場合はtrueを返す。そうでなければfalseを返す。
form.reportValidity()
フォームのコントロールがすべて有効である場合はtrueを返す。そうでなければfalseを返す。
この例は、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
要素Support in all current engines.
label
要素でないを除く。for
— フォームコントロールとラベルを関連付けるHTMLLabelElement
を使用する。label
は、ユーザーインターフェイスでのキャプションを表す。キャプションは、for
属性を使用するか、label
要素自身の内部にフォームコントロールを置くことのいずれかによって、特定のフォームコントロールに関連付けることができる。
Support in all current engines.
for
属性は、キャプションが関連付けされることになっているフォームコントロールを示すために指定されてもよい。この属性が指定される場合、属性値は、label
要素と同じツリーでラベル付け可能要素のIDでなければならない。
次の例は、ラベルを伴う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
この要素に関連付けられるフォームコントロールを返す。
label.form
この要素に関連付けられるフォームコントロールのフォーム所有者を返す。
存在しない場合nullを返す。
label
要素のform
IDL属性は、記載フォームに関連付けられた要素のform
IDL属性とは異なり、label
要素はform
コンテンツ属性を持たない。