* form 要素型 (Web Forms) [23] [[HTML]] の [DFN[[CODE(HTMLe)[form]] 要素]]は、 [[フォーム]]の[[包含子]]です。フォームの配置と提出先・提出方法を記述します。 [24] 仕様書: - [[HTML 4]] ([[Web Forms 1.0]]) -- 17.3 [CODE(HTMLe)[FORM]] element - [[XHTML 1.0]] [25] : [[開始タグ]]: 必須 : [[終了タグ]]: 必須 : [[内容模型]]: [CODE(SGML)[(%[[block]]; | [CODE(HTMLe)[[[script]]]])* −([CODE(HTMLe[form]])]] : 出現できる文脈 : [CODE(SGML)[%block]] な文脈 : [[属性]] : ,属性名,属性値,既定値,出典 ,[CODE(HTMLa)[[[accept]]]],[CODE(SGML)[%[[ContentTypes]]]],,受入れ媒体型,[HTML 4] ,[CODE(HTMLa)[[[accept-charset]]]],[CODE(SGML)[%[[Charsets]]]],,受入れ [[charset]],[HTML 4] ,[CODE(HTMLa)[[[action]]]],[CODE(SGML)[%[[URI]]]],(必須),フォーム処理器,[HTML 4] ,[CODE(HTMLa)[[[class]]]] ,,,[[級]] ,[HTML4] %[[coreattr]] ,[CODE(HTMLa)[[[dir]]]] ,,,[[書字方向]] ,[HTML4] %[[i18n]] ,[CODE(HTMLa)[[[enctype]]]],[CODE(SGML)[%[[ContentType]]]],,提出媒体型,[HTML 4] ,[CODE(HTMLa)[[[id]]]] ,,,一意識別子 ,[HTML4] %coreattr ,[CODE(HTMLa)[[[lang]]]] ,,,[[自然言語]] ,[HTML4] %i18n ,[CODE(HTMLa)[[[xml]]:lang]],,,自然言語 ,[XHTML1] ,[CODE(HTMLa)[[[method]]]],,[CODE(HTML)[[[get]]]],提出方式,[HTML 4] ,[CODE(HTMLa)[[[name]]]],,,フォーム名,[HTML 4] ,[CODE(HTMLa)[[[onclick]]]] ,,, ,[HTML4] %[[events]] ,[CODE(HTMLa)[[[ondblclick]]]],,, ,[HTML4] %events ,[CODE(HTMLa)[[[onkeydown]]]],,, ,[HTML4] %events ,[CODE(HTMLa)[[[onkeypress]]]],,, ,[HTML4] %events ,[CODE(HTMLa)[[[onkeyup]]]] ,,, ,[HTML4] %events ,[CODE(HTMLa)[[[onmousedown]]]],,, ,[HTML4] %events ,[CODE(HTMLa)[[[onmousemove]]]],,, ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseout]]]],,, ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseover]]]],,, ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseup]]]],,, ,[HTML4] %events ,[CODE(HTMLa)[[[onreset]]]],[CODE(SGML)[%[[Script]]]],,フォーム[[再設定]]時,[HTML 4] ,[CODE(HTMLa)[[[onsubmit]]]],[CODE(SGML)[%[[Script]]]],,フォーム[[提出]]時,[HTML 4] ,[CODE(HTMLa)[[[style]]]] ,,,スタイル情報 ,[HTML4] %coreattr ,[CODE(HTMLa)[[[subject]]]],[CODE(SGML)[%[[Text]]]],,主題, ,[CODE(HTMLa)[[[target]]]],[CODE(SGML)[%[[FrameTarget]]]],,対象フレーム,[HTML 4] 非推奨 ,[CODE(HTMLa)[[[title]]]] ,,,注釈的題 ,[HTML4] %coreattr [[#comment]] ** 内容 [26] [CODE(HTMLe)[form]] 要素の内容としては、 フォームの[RUBYB[配置][layout]]を記述します [SRC[HTML 4 17.3]]。 具体的には、フォーム外同様の通常の[[内容]]・[[マーク]]に加えて、 フォーム[[制御子]]やフォーム制御子の[RUBY[札][ラベル]]を記述できます。 [11] [CODE(HTMLe)[[[input]]]] 要素などは[[行内要素]]扱いですから、 直接内容に持つことは'''出来ません'''ので注意が必要です。 (Transitional とかだと話は別ですが。) [CODE(HTMLe)[[[form]]]] の直接の子供になれるのは [CODE(HTMLe)[[[p]]]] 要素などの[[ブロック水準要素]]です。 [16] [CODE(HTMLe)[form]] 要素の子孫に [CODE(HTMLe)[form]] 要素は存在できません [SRC[XHTML 1.0]]。 [[#comment]] ** 例 [27] 単純なフォームの例 [SRC[HTML 4 27.3、改]] [PRE(HTML)[
...form contents...
]PRE] このフォームの場合、提出すると [SAMP(URI)[adduser]] というフォーム処理エージェントに [[HTTP]] [CODE(HTTP)[[[POST]]]] を使ってフォームのデータを送信します。 [[#comment]] ** 実装 [21] 伝統的にフォームの各欄に入力していても、 提出しないでブラウザを閉じたり他の頁に移動したりしたときに、 ブラウザは何も言ってくれません。頁移動はともかく、閉じてしまったら、 入力途中のデータは失われます。これって不親切だと思いませんか。 [WEAK[っていうか、間違って終了させちゃったんだよなあ。。。書きかけのデータが水の泡。。。]] [22] >>21 とりあえず[[著者]]ができることとして、 [CODE(HTMLa)[[[onunload]]]] で check して終了をとめられないかなあ。 [28] 途中で別の作業が入って、また後から続きを・・・ と言うこともあるので、ブラウザに中途保存機能がついていると便利かも。 最近のブラウザはフォームの自動[[補完]]機能がついているものが多いですから、 利用者が意図的に保存できても良いはずです。 (嘆かわしいことですがブラウザや環境が突然動かなくなることがたまにありますから、 こまめに保存できるといいですよね。自動保存だとなお良い。) [[#comment]] ** 不思議解釈 [14] [CODE(HTMLe)[form]] 要素の典型的な[[既定スタイル・シート]]でのレンダリングでは [CODE(HTMLe)[form]] 要素の周囲に余白が空くことがあるので、 [CODE(HTMLe)[[[td]]]] 要素の内容にするときには [CODE(HTML)[<[CODE(HTMLe)[form]]>]] [[タグ]]を [CODE(HTML)[<[CODE(HTMLe)[td]]>]] タグの外に出すといい、 という素晴らしき[[不思議マーク付け]]の[[裏技]]があるそうです。 [[#comment]] ** メモ - [17] [CODE(URI)[[[mailto:]]]] URI のとき、 [[NN2]] はその宛先のメイル作成画面を開きますが、それ以上は何もしてくれません。 (入力欄の値はまったく反映されません。) [18] >>17 [[NC]]4.01 で試してみたら、同じ結果になりました。でも電子メイルで送信します云々の警告は出るので、対応はしてるはずなんですが。謎です。 - [20] >>17 のようなのはブラウザと MUA の相性で今でもよくあることみたいです。というわけで、 [[JavaScript]] を使って無理矢理送らせる方法 : ''フォームの送信について'' 。非本質的で呆れて物も言えなくなるような汚いやり方で、よくもまあこんなの思いつくなあという感じではありますが、誰も [CODE(HTML)[form]] + [CODE(URI)[mailto:]] を標準化しようとしない以上どうしようもないのかも。 [[#comment]] *メモ