
* form 要素 onsubmit 属性 (HTML, XHTML 1)

[1] [[HTML]] の [CODE(HTMLe)[[[form]]]] 要素の
[DFN[[CODE(HTMLa)[onsubmit]] 属性]]は、
[[フォーム]]が[[提出]]される時に発生する[[事象]]に関する[[内在事象]]属性です。

[2] 仕様書:
- [[HTML 4]]
-- [CODE(HTMLa)[onsubmit]] 属性
<IW:HTML4:"interact/scripts.html#adef-onsubmit">


[11]
:\
([[名無しさん]] [WEAK[2007-06-26 18:26:20 +00:00]])


[[#comment]]


** 代替

[3] 内在事象属性は[[表現と構造の分離]]の原則に反するので、
好ましくないと考える人もいます。また、 [[DOM 0]]
に基づく古い設計です。

代わりに、 [CODE(HTMLe)[[[script]]]] 要素などにより関連付けたスクリプト内で
[[DOM 2]] 以上の[[事象]]に関するメソッド等が利用できます。
DOM 水準 2 や DOM 水準 3 はこの属性に対応する
DOM の事象 [CODE(DOM)[[VAR[ev:]][[submit]]]] を用意しています。

[[#comment]]


** 属性値

[4] この属性の値は [CODE(SGML)[%[[Script]]]] です。 [[SGML]]
的には [CODE(SGML)[[[CDATA]]]] です。
自称が発生したときに実行するスクリプトの code
を記述します。[[スクリプト言語]]は、
[CODE(HTTP)[[[Content-Script-Type]]]] によります。

[5] この属性は省略可能です。

[[#comment]]


** 他との関係

[6] この属性に対応する DOM の事象は [CODE(DOM)[[VAR[ev:]][[submit]]]]
です。そちらもあわせてごらんください。

[[#comment]]


** メモ

[7]
[CODE(HTML example code)@en[]]
onsubmit="
[PRE[
  submit ();
  alert ('Submitted?');
  return false;
"
]PRE]

のようなことをすると、なぜか
[CODE(HTML example code)@en[]]
onsubmit="
[PRE[
  alert ('Submitted?');
"
]PRE]

のような振る舞いになります。
(Firefox 0.9, WinIE 6, Opera 8)
]PRE]
]PRE]

テスト:
[CITE@en[[CODE(DOMm)[submit()]] Method in [CODE(DOM)[submit]] Event]] 
<https://suika.suikawiki.org/~wakaba/-temp/test/html/form/event/submit-submit?text1=errrr>

([[名無しさん]] [sage])

[8]
[CODE(DOMm)@en[submit]] の後に [CODE(DOMm)@en[reset]]
を実行してみたらどうなのかと言えば、
リセット前のフォーム・データが提出されています。

[CITE@en[submit() Method Followed by reset() Method in submit Event]] 
<https://suika.suikawiki.org/~wakaba/-temp/test/html/form/event/submit-submit-reset>

逆に [CODE(DOMm)@en[reset]] してから [CODE(DOMm)@en[submit]]
してみると、リセット後のフォーム・データが提出されています。

[CITE@en[reset() Method Followed by submit() Method in submit Event]] 
<https://suika.suikawiki.org/~wakaba/-temp/test/html/form/event/submit-reset-submit>

(Firefox, WinIE 6, Opera 8)
([[名無しさん]] [sage])

[9]
[CODE(DOMm)[submit]] の時点で[[フォーム・データ集合]]が用意されて、
スクリプトを全部実行し終わってから提出・頁遷移するということでしょうか。
([[名無しさん]] [sage])

[10]
>>7-9 ではうっかりしていましたが、 [CODE(JS)@en[[[alert]]]]
を使ったのはやばかったですかね? それのせいで順番が入れ替わることもあるかも。
([[名無しさん]] [sage])

[[#comment]]


* メモ