* 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]] * メモ