* form 要素 onsubmit 属性 (HTML, XHTML 1)
[1] [[HTML]] の [CODE(HTMLe)[[[form]]]] 要素の
[DFN[[CODE(HTMLa)[onsubmit]] 属性]]は、
[[フォーム]]が[[提出]]される時に発生する[[事象]]に関する[[内在事象]]属性です。
[2] 仕様書:
- [[HTML 4]]
-- [CODE(HTMLa)[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]]
([[名無しさん]] [sage])
[8]
[CODE(DOMm)@en[submit]] の後に [CODE(DOMm)@en[reset]]
を実行してみたらどうなのかと言えば、
リセット前のフォーム・データが提出されています。
[CITE@en[submit() Method Followed by reset() Method in submit Event]]
逆に [CODE(DOMm)@en[reset]] してから [CODE(DOMm)@en[submit]]
してみると、リセット後のフォーム・データが提出されています。
[CITE@en[reset() Method Followed by submit() Method in submit Event]]
(Firefox, WinIE 6, Opera 8)
([[名無しさん]] [sage])
[9]
[CODE(DOMm)[submit]] の時点で[[フォーム・データ集合]]が用意されて、
スクリプトを全部実行し終わってから提出・頁遷移するということでしょうか。
([[名無しさん]] [sage])
[10]
>>7-9 ではうっかりしていましたが、 [CODE(JS)@en[[[alert]]]]
を使ったのはやばかったですかね? それのせいで順番が入れ替わることもあるかも。
([[名無しさん]] [sage])
[[#comment]]
* メモ