1.仕様
FORM要素は、
フォームに関連付けられた
要素のコレクションを介して
操作できるハイパーリンクを
表します。
その一部は、処理の為に
サーバーに送信できる
編集可能な値を
表す事ができます。
- form
-
フォーム (interactive form)
- 種類
-
通常要素
- コンテンツモデル
-
0個以上のフロー
コンテンツ (form要素 を除く)0個以上のフロー
コンテンツ が配置できます。ですが、form要素 は子孫に持てません。form
要素 を除くフローコンテンツ に分類される要素は、header要素 , footer要素 , main要素 , address要素 , ol要素 , ul要素 , menu要素 , dl要素 , table要素 , fieldset要素 , search要素 , hr要素 , p要素 , pre要素 , blockquote要素 , figure要素 , div要素 , dialog要素 , section要素 , nav要素 , aside要素 , article要素 , h1要素 , h2要素 , h3要素 , h4要素 , h5要素 , h6要素 , hgroup要素 , script要素 , noscript要素 , template要素 , input要素 , textarea要素 , select要素 , label要素 , button要素 , output要素 , progress要素 , meter要素 , datalist要素 , picture要素 , object要素 , img要素 , iframe要素 , embed要素 , video要素 , audio要素 , canvas要素 , map要素 , area要素 , a要素 , details要素 , ins要素 , del要素 , abbr要素 , b要素 , bdi要素 , bdo要素 , cite要素 , code要素 , data要素 , dfn要素 , em要素 , i要素 , kbd要素 , mark要素 , q要素 , s要素 , samp要素 , small要素 , span要素 , strong要素 , sub要素 , sup要素 , u要素 , var要素 , time要素 , ruby要素 , br要素 , wbr要素 , slot要素 , テキスト です。form要素の子孫はありません。
- タグの省略
-
どちらのタグも省略できません。
- コンテンツ属性
-
グローバル属性 他
- accept-charset
属性 - フォーム送信に使用する文字エンコーディング
- action
属性 - フォーム送信に使用するURL
- autocomplete
属性 - フォーム内のコントロールの自動入力機能のデフォルト設定
- enctype
属性 - フォーム送信に使用するエントリリストのエンコードタイプ
- method
属性 - フォーム送信に使用するHTTPメソッド
- name
属性 - document.forms API で使用するフォームの名前
- novalidate
属性 - フォーム送信時のフォーム コントロールの検証をバイパスする
- target
属性 - フォーム送信にナビゲート可能
- rel
属性 - 要素が作成するリンクの種類を制御
- accept-charset
- DOM インターフェイス
-
HTMLFormElement
[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;
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();
};
HTMLElement
[Exposed=Window]
interface HTMLElement : Element {
[HTMLConstructor] constructor();
// metadata attributes
[CEReactions] attribute DOMString title;
[CEReactions] attribute DOMString lang;
[CEReactions] attribute boolean translate;
[CEReactions] attribute DOMString dir;
// user interaction
[CEReactions] attribute (boolean or unrestricted double or DOMString)? hidden;
[CEReactions] attribute DOMString inert;
undefined click();
[CEReactions] attribute DOMString accessKey;
readonly attribute DOMString accessKeyLabel;
[CEReactions] attribute boolean draggable;
[CEReactions] attribute boolean spellcheck;
[CEReactions] attribute DOMString writingSuggestions;
[CEReactions] attribute DOMString autocapitalize;
[CEReactions] attribute [LegacyNullToEmptyString] DOMString innerText;
[CEReactions] attribute [LegacyNullToEmptyString] DOMString outerText;
ElementInternals attachInternals();
// The popover API
undefined showPopover();
undefined hidePopover();
boolean togglePopover(optional boolean force);
[CEReactions] attribute DOMString? popover;
};
HTMLElement includes GlobalEventHandlers;
HTMLElement includes ElementContentEditable;
HTMLElement includes HTMLOrSVGElement;
Element
[Exposed=Window]
interface Element : Node {
readonly attribute DOMString? namespaceURI;
readonly attribute DOMString? prefix;
readonly attribute DOMString localName;
readonly attribute DOMString tagName;
[CEReactions] attribute DOMString id;
[CEReactions] attribute DOMString className;
[SameObject, PutForwards=value] readonly attribute DOMTokenList classList;
[CEReactions, Unscopable] attribute DOMString slot;
boolean hasAttributes();
[SameObject] readonly attribute NamedNodeMap attributes;
sequence<DOMString> getAttributeNames();
DOMString? getAttribute(DOMString qualifiedName);
DOMString? getAttributeNS(DOMString? namespace, DOMString localName);
[CEReactions] undefined setAttribute(DOMString qualifiedName, DOMString value);
[CEReactions] undefined setAttributeNS(DOMString? namespace, DOMString qualifiedName, DOMString value);
[CEReactions] undefined removeAttribute(DOMString qualifiedName);
[CEReactions] undefined removeAttributeNS(DOMString? namespace, DOMString localName);
[CEReactions] boolean toggleAttribute(DOMString qualifiedName, optional boolean force);
boolean hasAttribute(DOMString qualifiedName);
boolean hasAttributeNS(DOMString? namespace, DOMString localName);
Attr? getAttributeNode(DOMString qualifiedName);
Attr? getAttributeNodeNS(DOMString? namespace, DOMString localName);
[CEReactions] Attr? setAttributeNode(Attr attr);
[CEReactions] Attr? setAttributeNodeNS(Attr attr);
[CEReactions] Attr removeAttributeNode(Attr attr);
ShadowRoot attachShadow(ShadowRootInit init);
readonly attribute ShadowRoot? shadowRoot;
Element? closest(DOMString selectors);
boolean matches(DOMString selectors);
boolean webkitMatchesSelector(DOMString selectors); // legacy alias of .matches
HTMLCollection getElementsByTagName(DOMString qualifiedName);
HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
HTMLCollection getElementsByClassName(DOMString classNames);
[CEReactions] Element? insertAdjacentElement(DOMString where, Element element); // legacy
undefined insertAdjacentText(DOMString where, DOMString data); // legacy
};
GlobalEventHandlers
interface mixin GlobalEventHandlers {
attribute EventHandler onabort;
attribute EventHandler onauxclick;
attribute EventHandler onbeforeinput;
attribute EventHandler onbeforematch;
attribute EventHandler onbeforetoggle;
attribute EventHandler onblur;
attribute EventHandler oncancel;
attribute EventHandler oncanplay;
attribute EventHandler oncanplaythrough;
attribute EventHandler onchange;
attribute EventHandler onclick;
attribute EventHandler onclose;
attribute EventHandler oncontextlost;
attribute EventHandler oncontextmenu;
attribute EventHandler oncontextrestored;
attribute EventHandler oncopy;
attribute EventHandler oncuechange;
attribute EventHandler oncut;
attribute EventHandler ondblclick;
attribute EventHandler ondrag;
attribute EventHandler ondragend;
attribute EventHandler ondragenter;
attribute EventHandler ondragleave;
attribute EventHandler ondragover;
attribute EventHandler ondragstart;
attribute EventHandler ondrop;
attribute EventHandler ondurationchange;
attribute EventHandler onemptied;
attribute EventHandler onended;
attribute OnErrorEventHandler onerror;
attribute EventHandler onfocus;
attribute EventHandler onformdata;
attribute EventHandler oninput;
attribute EventHandler oninvalid;
attribute EventHandler onkeydown;
attribute EventHandler onkeypress;
attribute EventHandler onkeyup;
attribute EventHandler onload;
attribute EventHandler onloadeddata;
attribute EventHandler onloadedmetadata;
attribute EventHandler onloadstart;
attribute EventHandler onmousedown;
[LegacyLenientThis] attribute EventHandler onmouseenter;
[LegacyLenientThis] attribute EventHandler onmouseleave;
attribute EventHandler onmousemove;
attribute EventHandler onmouseout;
attribute EventHandler onmouseover;
attribute EventHandler onmouseup;
attribute EventHandler onpaste;
attribute EventHandler onpause;
attribute EventHandler onplay;
attribute EventHandler onplaying;
attribute EventHandler onprogress;
attribute EventHandler onratechange;
attribute EventHandler onreset;
attribute EventHandler onresize;
attribute EventHandler onscroll;
attribute EventHandler onscrollend;
attribute EventHandler onsecuritypolicyviolation;
attribute EventHandler onseeked;
attribute EventHandler onseeking;
attribute EventHandler onselect;
attribute EventHandler onslotchange;
attribute EventHandler onstalled;
attribute EventHandler onsubmit;
attribute EventHandler onsuspend;
attribute EventHandler ontimeupdate;
attribute EventHandler ontoggle;
attribute EventHandler onvolumechange;
attribute EventHandler onwaiting;
attribute EventHandler onwebkitanimationend;
attribute EventHandler onwebkitanimationiteration;
attribute EventHandler onwebkitanimationstart;
attribute EventHandler onwebkittransitionend;
attribute EventHandler onwheel;
};
ElementContentEditable
interface mixin ElementContentEditable {
[CEReactions] attribute DOMString contentEditable;
[CEReactions] attribute DOMString enterKeyHint;
readonly attribute boolean isContentEditable;
[CEReactions] attribute DOMString inputMode;
};
HTMLOrSVGElement
interface mixin HTMLOrSVGElement {
[SameObject] readonly attribute DOMStringMap dataset;
attribute DOMString nonce; // intentionally no [CEReactions]
[CEReactions] attribute boolean autofocus;
[CEReactions] attribute long tabIndex;
undefined focus(optional FocusOptions options = {});
undefined blur();
};
- ARIA in HTML
-
暗黙的="
form
" ARIAロール="あり" aria-* 属性="GlobalAny
"暗黙的な ARIAセマンティクスは、
role=form
です。作成者が要素に指定してもよい ARIAロール値は、 none, presentation, search です。
グローバル aria-* 属性と、許可されたロールに適用される任意の aria-* 属性が記述できます。
- レンダリング
- ブロック
ボックス フローコンテンツ
form {
display: block;
margin-block-end: 1em;
unicode-bidi: isolate;
}
:is(table, thead, tbody, tfoot, tr) > form { display: none !important; }
CSS を大雑把に読むと、 ブロックレベルのブロックコンテナボックス(ブロックボックス)を生成します。 などになります。
- 説明
-
form
要素 は、フォーム関連要素のコレクションを通じて操作できるハイパーリンクを表します。その一部は、処理のためにサーバーに送信できる編集可能な値を表すことができます。<!DOCTYPE html>
<html lang=
"ja"> <head>
<meta charset=
"utf-8"> <title>form要素の例 - (Example of form element) | 離珠のHTMLでしぃ!</title>
</head>
<body>
<h1>form要素の例</h1>
<form action=
"../Html/fmreceive.htm"> <input name=
"nipInput" value= "abc"> <button name=
"nbtSender" value= "../Html/exform.htm">ボタン</button> <br>受信用の<br>ページへ
</form>
</body>
</html>
このサンプルへのリンクです。
(./exform.htm) - 参照元
-
参照元
- HTML Living Standard. 4.10.3 The form element (Last Updated 27 August 2024)
- HTML Living Standard. 15 Rendering 15.3.3 Flow content (Last Updated 27 August 2024)
- HTML 5.2 W3C 勧告. 4.10.3 The form element (W3C勧告、2017年12月14日)
- HTML 5.2 W3C 勧告. 10.3.3. Flow content. (W3C勧告、2017年12月14日)
- HTML 5.1 W3C 勧告. 4.10.3 The form element (W3C勧告、2016年11月1日)
- HTML 5.1 W3C 勧告. 10.3.3. Flow content. (W3C勧告、2016年11月1日)
- HTML 5 W3C 勧告. 4.10.3 The form element (W3C勧告、2014年10月28日)
- HTML 5 W3C 勧告. 10.3.3. Flow content. (W3C勧告、2014年10月28日)
- HTML 4.01 Specification W3C 勧告. 17.3 The FORM elements (W3C勧告1999年12月24日)
- HTML 3.2 Reference Specification (W3C勧告1997年1月14日)
- Hypertext Markup Language - 2.0 (November 1995)
- <form>: フォーム要素 - HTML: ハイパーテキストマークアップ言語 | MDN
- JSONデータ
-
JSON形式での、データのイメージです。
{
"form": {
"check": "2024-09-01",
"group": "Form",
"element": "- - (%Flow)* -(form) -- interactive form. (Normal elements.) [Flow|Palpable] --",
"attlist": {
"%Global;": "",
"accept-charset": "%Charsets; #IMPLIED -- Character encodings to use for form submission --",
"action": "%URI; #IMPLIED -- URL to use for form submission --",
"autocomplete": "(on|off) on -- Default setting for autofill feature for controls in the form --",
"enctype": "%ContentType; application/x-www-form-urlencoded -- Entry list encoding type to use for form submission --",
"method": "(get|post|dialog) get -- Variant to use for form submission--",
"name": "CDATA #IMPLIED -- Name of form to use in the document.forms API --",
"novalidate": "(novalidate) #IMPLIED -- Bypass form control validation for form submission --",
"target": "%FrameTarget; #IMPLIED -- Navigable for form submission --",
"rel": "%LinkTypes; #IMPLIED -- Relationship from the current document --",
},
"comment": "フォーム (interactive form)",
"point": "フォーム関連要素のコレクションを通じて操作できるハイパーリンクを表します。その一部は、処理のためにサーバーに送信できる編集可能な値を表すことができます。",
"kind": "Normal",
"categories": [
"Flow",
"Palpable",
],
"used": "parent (%Flow)*",
"contentmodel": "form (%Flow)* -(form)",
"contentmodelsupplement": "form要素の子孫はありません。",
"tag": [
"-",
"-",
],
"attributes": {
"accept-charset": "フォーム送信に使用する文字エンコーディング",
"action": "フォーム送信に使用するURL",
"autocomplete": "フォーム内のコントロールの自動入力機能のデフォルト設定",
"enctype": "フォーム送信に使用するエントリリストのエンコードタイプ",
"method": "フォーム送信に使用するHTTPメソッド",
"name": "document.forms API で使用するフォームの名前",
"novalidate": "フォーム送信時のフォーム コントロールの検証をバイパスする",
"target": "フォーム送信にナビゲート可能",
"rel": "要素が作成するリンクの種類を制御",
},
"dominterface": "HTMLFormElement",
"rendering": [
"Flow",
"Bidirectional",
],
"reference": [
{
"title": "HTML Living Standard. 4.10.3 The form element.",
"href": "https://html.spec.whatwg.org/multipage/forms.html#the-form-element",
"heading": "HTML Living Standard. 4.10.3 The form element",
"sub": "Last Updated 27 August 2024",
},
{
"title": "HTML Living Standard. 15 Rendering 15.3.3 Flow content.",
"href": "https://html.spec.whatwg.org/multipage/rendering.html#flow-content-3",
"heading": "HTML Living Standard. 15 Rendering 15.3.3 Flow content",
"sub": "Last Updated 27 August 2024",
},
{
"title": "HTML 5.2 W3C Recommendation. 4.10.3 The form element. W3C Recommendation, 14 December 2017.",
"href": "https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#the-form-element",
"heading": "HTML 5.2 W3C 勧告. 4.10.3 The form element",
"sub": "W3C勧告、2017年12月14日",
},
{
"title": "HTML 5.2 W3C Recommendation. 10.3.3. Flow content.",
"href": "https://www.w3.org/TR/2017/REC-html52-20171214/rendering.html#non-replaced-elements-flow-content",
"heading": "HTML 5.2 W3C 勧告. 10.3.3. Flow content.",
"sub": "W3C勧告、2017年12月14日",
},
{
"title": "HTML 5.1 W3C Recommendation. 4.10.3 The form element. W3C Recommendation, 1 November 2016.",
"href": "https://www.w3.org/TR/2016/REC-html51-20161101/sec-forms.html#the-form-element",
"heading": "HTML 5.1 W3C 勧告. 4.10.3 The form element",
"sub": "W3C勧告、2016年11月1日",
},
{
"title": "HTML 5.1 W3C Recommendation. 10.3.3. Flow content. W3C Recommendation, 1 November 2016.",
"href": "https://www.w3.org/TR/2016/REC-html51-20161101/rendering.html#non-replaced-elements-flow-content",
"heading": "HTML 5.1 W3C 勧告. 10.3.3. Flow content.",
"sub": "W3C勧告、2016年11月1日",
},
{
"title": "HTML 5 W3C Recommendation. 4.10.3 The form element. W3C Recommendation, 28 October 2014.",
"href": "https://www.w3.org/TR/2014/REC-html5-20141028/forms.html#the-form-element",
"heading": "HTML 5 W3C 勧告. 4.10.3 The form element",
"sub": "W3C勧告、2014年10月28日",
},
{
"title": "HTML 5 W3C Recommendation. 10.3.3. Flow content. W3C Recommendation, 28 October 2014.",
"href": "https://www.w3.org/TR/2014/REC-html5-20141028/rendering.html#flow-content-0",
"heading": "HTML 5 W3C 勧告. 10.3.3. Flow content.",
"sub": "W3C勧告、2014年10月28日",
},
{
"title": "HTML 4.01 Specification W3C Recommendation. 17.3 The FORM element. W3C Recommendation 24 December 1999.",
"href": "https://www.w3.org/TR/html401/interact/forms.html#h-17.3",
"heading": "HTML 4.01 Specification W3C 勧告. 17.3 The FORM elements",
"sub": "W3C勧告1999年12月24日",
},
{
"title": "HTML 3.2 Reference Specification. W3C Recommendation 14-Jan-1997.",
"href": "https://www.w3.org/TR/2018/SPSD-html32-20180315/#form",
"heading": "HTML 3.2 Reference Specification",
"sub": "W3C勧告1997年1月14日",
},
{
"title": "Hypertext Markup Language - 2.0. November 1995.",
"href": "https://www.ietf.org/rfc/rfc1866.txt",
"heading": "Hypertext Markup Language - 2.0",
"sub": "November 1995",
},
{
"title": "MDN Web Docs. HTML <form>: The Form element.",
"href": "https://developer.mozilla.org/ja/docs/Web/HTML/Element/form",
"heading": "<form>: フォーム要素 - HTML: ハイパーテキストマークアップ言語 | MDN",
},
],
"version": {
"first": "HTML2",
"latest": "HTML Living Standard",
},
}
}
注意: 簡易に描画する為に、各項目の後ろに
,
を付与しています。JSON の形式では、末尾の項目の後には,
は付けません。 - 最終確認日
-
2024-09-01
2.使用可能な箇所
フロー
受け入れる要素に
配置できます。
form
フロー
3.配置できるコンテンツ
フロー
配置できます。
form
フロー
4.属性
グローバル属性と、
accept-charset,
action,
autocomplete,
enctype,
method,
name,
novalidate,
target,
rel を
設定できます。
formは、グローバル属性とaccept-charset属性, action属性, autocomplete属性, enctype属性, method属性, name属性, novalidate属性, target属性, rel属性を設定できます。
accept-charset属性
<form action=
"./fmreceive.htm" accept-charset= "UTF-8" ><button name=
"nbtSender" value= "./foform.htm#MH3ACCEPTCHARSET">ボタン</button> </form>
accept-charsetは、送信に使用される文字
属性値の"UTF-8"
の例示は推奨でもありますが、その文書や受信側都合で別のコードである必要もあります。その場合は、別途にお調べ下さい。というか、普段はこの属性は省略して、必要に応じて記述するべきかと思います。
action属性
<form action=
"./fmreceive.htm" ><button name=
"nbtSender" value= "./foform.htm#MH3ACTION">ボタン</button> </form>
actionは、フォーム送信に使用するURL(Uniform Resource Locator.)を指定します。指定する場合、値は スペースで囲まれる可能性がある有効な空でない URL の値を持たなければなりません。
要素のアクションは、要素が送信ボタンでそのような属性を持つ場合は要素のformactionの値、フォーム所有者のactionがある場合はその値、それ以外の場合は空の文字列です。
属性値の"./fmreceive.htm"
の例示は当サイトで送信の例示用(受信用)に用意したページです。相対指定での記述を採用したので、配置が変わった場合などは書き換えが必要です。
autocomplete属性
<form action=
"./fmreceive.htm" autocomplete= " >" <input name=
"nipText"><br> <button name=
"nbtSender" value= "./foform.htm#MH3AUTOCOMPLETE">ボタン</button> </form>
autocompleteは、フォーム内のコントロールの自動入力フィールドのデフォルト値を指定します。
autocompleteは、次のキーワード(keywords)と状態(states)を持つ列挙属性(enumerated attribute)です。
- on
- フォームコントロールでは、自動入力フィールド名がデフォルトで「オン」に設定されます。
- off
- フォームコントロールでは、自動入力フィールド名がデフォルトで「オフ」に設定されます。
列挙属性と呼ばれる一部の属性は、有限の状態セットを取ります。このような属性の状態は、属性の値、各属性の仕様で指定されたキーワード/状態マッピングのセット、および属性の仕様で指定できる 2 つの特殊な状態を組み合わせることによって生成されます。これらの特殊な状態は、無効な値のデフォルトと欠落した値のデフォルトです。
この属性の欠落値のデフォルトと無効な値のデフォルトは両方とも on の状態です。
例示として用意していますが、初期の状態で on にしても、提示する値がないので違いは判りません。また off はクリアではないので、その後で on にすると提示すべき値が再度表示されます。
例示に於いて、見易さの為にinputにスタイルシートで装飾(幅)の指定をしています。
enctype属性
<form action=
"./fmreceive.htm" enctype= " >" <button name=
"nbtSender" value= "./foform.htm#MH3ENCTYPE">ボタン</button> </form>
enctypeは、フォーム送信に使用するエントリリストのエンコード
enctypeは、次のキーワード(keywords)と状態(states)を持つ列挙属性(enumerated attribute)です。
- 「application/x-www-form-urlencoded」キーワードと対応する状態。
- 「multipart/form-data」キーワードと対応する状態。
- 「text/plain」キーワードと対応する状態。
列挙属性と呼ばれる一部の属性は、有限の状態セットを取ります。このような属性の状態は、属性の値、各属性の仕様で指定されたキーワード/状態マッピングのセット、および属性の仕様で指定できる 2 つの特殊な状態を組み合わせることによって生成されます。これらの特殊な状態は、無効な値のデフォルトと欠落した値のデフォルトです。
この属性の欠落値のデフォルトと無効な値のデフォルトは両方とも application/x-www-form-urlencoded の状態です。
要素の enctype は、これら 3 つの状態の 1 つです。要素が送信ボタンであり、formenctypeを持つ場合、要素の enctype はその属性の状態になります。それ以外の場合は、フォーム所有者のenctypeの状態です。
一応は例示としてデモを提示していますが、この記述では違いが現れないと思います。必要に応じて指定して下さい。
method属性
<form action=
"./fmreceive.htm" method= " >" <button name=
"nbtSender" value= "./foform.htm#MH3METHOD">ボタン</button> </form>
methodは、フォーム送信に使用するHTTPメソッドを指定します。
methodは、次のキーワード(keywords)と状態(states)を持つ列挙属性(enumerated attribute)です。
- get
- フォームが HTTP GET メソッドを使用することを示します。
- post
- フォームが HTTP POST メソッドを使用することを示します。
- dialog
- フォームが存在するダイアログボックスがあればそれを閉じ、それ以外の場合は送信しないことをフォームが意図していることを示します。
列挙属性と呼ばれる一部の属性は、有限の状態セットを取ります。このような属性の状態は、属性の値、各属性の仕様で指定されたキーワード/状態マッピングのセット、および属性の仕様で指定できる 2 つの特殊な状態を組み合わせることによって生成されます。これらの特殊な状態は、無効な値のデフォルトと欠落した値のデフォルトです。
この属性の欠落値のデフォルトと無効な値のデフォルトは両方とも get の状態です。
要素の method は、これら 3 つの状態の 1 つです。要素が送信ボタンであり、formmethodを持つ場合、要素の method はその属性の状態になります。それ以外の場合は、フォーム所有者のmethodの状態です。
一応は例示としてデモを提示していますが、この例示で用意している送信先では受信データを処理していないので効果が分かり難いです。必要に応じて指定して下さい。一応は URL で送信データが見えるか否かの違いは判りますが。尚、post には受信側で対応していないので、どこから送信されたか判らない仕様です。「戻る」で戻るか上位ページへリンクを辿るかして下さい。
name属性
<form action=
"./fmreceive.htm" name= "nfoForm" ><button name=
"nbtSender" value= "./foform.htm#MH3NAME">ボタン</button> </form>
nameは、document.forms API で使用するフォームの
novalidate属性
<form action=
"./fmreceive.htm" > <input name=
"nipText" required><br> <button name=
"nbtSender" value= "./foform.htm#MH3NOVALIDATE">ボタン</button> </form>
novalidateはブール属性で、存在する場合はフォーム送信時のフォーム
要素の no-validate 状態は、要素が送信ボタンであり、要素のformnovalidateが存在する場合、または要素のフォーム所有者のnovalidateが存在する場合は true、それ以外の場合は false です。
inputにrequiredを指定して、「入力必須」としています。
例示に於いて、見易さの為にinputにスタイルシートで装飾(幅)の指定をしています。
target属性
<form action=
"./fmreceive.htm" target= "nifTarget" ><button name=
"nbtSender" value= "./foform.htm#MH3TARGET">ボタン</button> </form>
<iframe name=
"nifTarget"></iframe>
targetは、フォーム送信に有効なナビゲーション可能なターゲット名
target および formtargetコンテンツ属性が指定されている場合、その値は有効なナビゲート可能なターゲット名またはキーワードである必要があります。キーワードは ASCII 大文字と小文字を区別せずに、
- _blank: new
- _self: current
- _parent: parent
- _top: top
例示ではiframeにnameを指定して、「ターゲット名」としています。また見易さの為に、iframeにスタイルシートで装飾(幅)の指定をしています。
rel属性
<form action=
"./fmreceive.htm" rel= "next" ><button name=
"nbtSender" value= "./foform.htm#MH3REL">ボタン</button> </form>
relは、要素が作成するリンクの種類を制御します。属性の値は、スペースで区切られた一意のトークンの順序のないセットである必要があります。許可されるキーワードとその意味は、4.6.7 Link types(HTML Living Standard.)で定義されています。
一応は例示としてデモを提示していますが、動作に効果のある属性ではないと思います。なのでキーワードの動的指定の提示も行っていません。
id属性
<form action=
"./fmreceive.htm" id= "ifoId" ></form><button form=
"ifoId" name= "nbtSender" value= "./foform.htm#MH3ID">ボタン</button>
idは、IDを指定します。属性値は要素のツリー内のすべての ID の中で一意である必要があり、少なくとも 1 つの文字が含まれている必要があります。値には ASCII 空白を含めることはできません。
例示では、buttonにformを指定して、formに関連付けます。
他の属性で提示している例示では、formの子孫としてbutton等を配置する事で、関連付けをしています。
尚、idをform指定したからといって、各フォーム関連要素にformを指定して、関連付けが必須となる訳ではありません。
5.Web API
documentの
プロパティである
formsは、
文書内の
form要素
(HTMLFormElement
オブジェクト)の
HTMLCollectionを
返します。
formdocument.forms[name]
などと指定する事で、当該フォームを取得できます。document.forms[index]
などと添え字を 0 から 件数 - 1 まで指定する事で、文書内のフォームを一通り取得できます。
formsプロパティ
[Exposed=Window, LegacyUnenumerableNamedProperties]
interface HTMLCollection {
readonly attribute unsigned long length;
getter Element? item(unsigned long index);
getter Element? namedItem(DOMString name);
};
<div>この文書のフォームは、
<div id=
"idvJsForms150">〇〇</div> </div>
<script>
document
.addEventListener( "DOMContentLoaded", function() { var voForms150 = document
.forms ;var voDemo150 = document
.getElementById( "idvJsForms150"); var veUl = document
.createElement( "ul"); var veLi = document
.createElement( "li"); var veSpan = document
.createElement( "span"); for (var i = 0; i < voForms150.length; i++){
veLi = document
.createElement( "li"); veSpan = document
.createElement( "span"); veSpan.textContent = 'index=' + i + '. name="' + voForms150[i].name + '" nbtSender=' + voForms150[i].nbtSender.value;
veLi
.appendChild( veSpan); veUl
.appendChild( veLi); }
if(veUl
.childElementCount) { voDemo150
.textContent = ""; while(
voDemo150 .firstChild){ voDemo150
.removeChild( voDemo150 .firstChild); }
voDemo150
.appendChild( veUl); }
});
</script>
コレクションは、ノードのリストを表すオブジェクトです。
例示では、この文書のformの一覧リストを出力するJavascriptコードとその実行結果を想定しています。
作成者の決め事として、送信ボタンに送信元が分かる値を nbtSender という名前で用意するという事にしているので、ついででそれを出力しています。
目的の為の手段の提示ではなく、この方法でこんな事が出来るという機能の提示です。これを元にいろいろ書き換える事を想定していて、ただ機能を提示しています。故に簡素化, 処理速度などは一切考えていません。
例示で表示する為に、HTML文書の読み込みと解析が終了した時に処理するコードとしています。 また見易さの為に、属性値の部分に対してスタイルシートで文字列の途中で折り返す様に指定しています。
document
の querySelector
メソッド等を用いる事も考えられますが、このプロパティで充分でしょう。名前で特定したい場合でも、属性セレクタで同等の事は出来ますが、
コンテンツ属性
コンテンツ |
IDL属性 | 備考 |
---|---|---|
accept-charset | acceptCharset | |
action | action | |
autocomplete | autocomplete | IDL属性は、既知の値のみに制限されます。 |
enctype | enctype | |
enctype | encoding | 既知の値のみに制限された enctypeコンテンツ属性を反映 |
method | method | |
name | name | |
novalidate | noValidate | |
target | target | |
rel | rel | |
rel | relList | relコンテンツ属性を反映 |
<form action=
"./fmreceive.htm" accept-charset= "UTF-8" autocomplete= "on" enctype= "application/x-www-form-urlencoded" method= "get" name= "nfoForm151" novalidate target= "_top" rel= "next" id= "ifoId151"> <input name=
"nipText" required><br> <button name=
"nbtSender" value= "./foform.htm#MAP5NEXT">ボタン</button> </form>
<div>このフォームの各値は、
<ul>
<li>action="<span id=
"ispJsAction">〇〇</span>"</li> <li>accept-charset="<span id=
"ispJsAccept">〇〇</span>"</li> <li>autocomplete="<span id=
"ispJsAutocomplete">〇〇</span>"</li> <li>enctype="<span id=
"ispJsEnctype">〇〇</span>"</li> <li>encoding="<span id=
"ispJsEncoding">〇〇</span>"</li> <li>method="<span id=
"ispJsMethod">〇〇</span>"</li> <li>name="<span id=
"ispJsName">〇〇</span>"</li> <li>novalidate="<span id=
"ispJsNovalidate">〇〇</span>"</li> <li>target="<span id=
"ispJsTarget">〇〇</span>"</li> <li>rel="<span id=
"ispJsRel">〇〇</span>"</li> <li>id="<span id=
"ispJsId">〇〇</span>"</li> </ul>
</div>
<script>
document
.addEventListener( "DOMContentLoaded", function() { var voForm151 = document
.forms["nfoForm151"] ;document
.getElementById( "ispJsAction") .textContent = voForm151 .action; document
.getElementById( "ispJsAccept") .textContent = voForm151 .acceptCharset; document
.getElementById( "ispJsAutocomplete") .textContent = voForm151 .autocomplete; document
.getElementById( "ispJsEnctype") .textContent = voForm151 .enctype; document
.getElementById( "ispJsEncoding") .textContent = voForm151 .encoding; document
.getElementById( "ispJsMethod") .textContent = voForm151 .method; document
.getElementById( "ispJsName") .textContent = voForm151 .name; document
.getElementById( "ispJsNovalidate") .textContent = voForm151 .noValidate; document
.getElementById( "ispJsTarget") .textContent = voForm151 .target; document
.getElementById( "ispJsRel") .textContent = voForm151 .rel; document
.getElementById( "ispJsId") .textContent = voForm151 .id; });
</script>
HTMLの要素に記述(設定)する属性を、コンテンツ
この例示は、ひとつのformを特定してコンテンツ
例示で表示する為に、HTML文書の読み込みと解析が終了した時に処理するコードとしています。 また見易さの為に、属性値の部分に対してスタイルシートで文字列の途中で折り返す様に指定しています。
尚、getAttributeメソッドなどを使って、コンテンツ
- action="〇〇"
- accept-charset="〇〇"
- autocomplete="〇〇"
- enctype="〇〇"
- encoding="〇〇"
- method="〇〇"
- name="〇〇"
- novalidate="〇〇"
- target="〇〇"
- rel="〇〇"
- relList="〇〇"
- id="〇〇"
elementsプロパティ
[Exposed=Window]
interface HTMLFormControlsCollection : HTMLCollection {
// inherits length and item()
getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem()
};
<form action=
"./fmreceive.htm" name= "nfoForm152"> <input name=
"nipText" onchange= "fvJsElements();"><br> <button name=
"nbtSender" value= "./foform.htm#MAP5NEXT">ボタン</button> </form>
<div>このフォームのフォームコントロールは、
<div id=
"idvJsElements152">〇〇</div> </div>
<script>
var fvJsElements = function() {
var voElements152 = document
.forms["nfoForm152"].elements ;var voDemo152 = document
.getElementById( "idvJsElements152"); var veUl = document
.createElement( "ul"); var veLi = document
.createElement( "li"); var veSpan = document
.createElement( "span"); for (var i = 0; i < voElements152.length; i++){
veLi = document
.createElement( "li"); veSpan = document
.createElement( "span"); veSpan.textContent = 'tagName=' + voElements152[i].tagName + ' name=' + voElements152[i].name + ' value=' + voElements152[i].value;
veLi
.appendChild( veSpan); veUl
.appendChild( veLi); }
if(veUl
.childElementCount) { voDemo152
.textContent = ""; while(
voDemo152 .firstChild){ voDemo152
.removeChild( voDemo152 .firstChild); }
voDemo152
.appendChild( veUl); }
};
document
.addEventListener( "DOMContentLoaded", function() { fvJsElements();
});
</script>
elements IDL
例示では、formの子孫にフォーム関連要素を置いてフォーム所有者を関連付けて、そのリストとなる要素のname IDL
目的の為の手段の提示ではなく、この方法でこんな事が出来るという機能の提示です。これを元にいろいろ書き換える事を想定していて、ただ機能を提示しています。故に簡素化, 処理速度などは一切考えていません。
例示で表示する為に、HTML文書の読み込みと解析が終了した時に処理するコードとしています。 また見易さの為に、属性値の部分に対してスタイルシートで文字列の途中で折り返す様に指定しています。
document
の querySelector
メソッド等を用いる事も考えられますが、このプロパティで充分でしょう。名前で特定したい場合でも、属性セレクタで同等の事は出来ますが、
6.レンダリング
form {
display: block;
margin-block-end: 1em;
}
form
フォーム関連要素を含むラッパーボックスとしてform
7.気を付ける点
フォームの送信
form
フォームの所有者
フォーム関連要素は、要素のフォーム所有者と呼ばれるform
この状況からして、form
名前
nameを用いて名前を付ける時に、プロパティの名称と同じだとアクセスに干渉する事が考えられます。故に命名には内部規則として命名規則を事前に決めておくのが良いと思います。