html5系列:form 2.0 新結構

以往的一個form表單,結構比較死板,所有的form元素都必須處在<form></form>之間纔有效,這會造成一些麻煩,比如說:像bootstrap這種使用<div>來控制佈局的框架,<form>放在哪都很尷尬;另外,目前的web 2.0,UI比較豐富,爲了佈局或其它的原因,表單元素之間可能充斥着大量非表單相關的元素,而form 1.0又規定表單元素必須在閉合的<form>標籤以內,那<form></form>就相隔得非常遠了,也是相當彆扭的。

form 2.0並不要求form元素處在<form></form>之間,只需要爲其指定屬於哪個表單(甚至是“哪幾個表單”)即可,由此便衍生出以下的寫法:

<form id="test-form" method="post" action="save.php"></form>
First name: 
<input type="text" name="firstname" form="test-form" />
<br />
Last name: 
<input type="text" name="lastname" form="test-form" />

另外,每個form元素可以隸屬於多個form表單,換句話說,多個form表單可以共享同一個form元素。用form屬性指定多個form表單時用空格分隔,如下所示:

<form id="test-form1" method="post" action="save.php"></form>
<form id="test-form2" method="post" action="save.php"></form>
<input type="text" name="firstname" form="test-form1 test-form2" />

form override attributes(表單重寫屬性)

網上的資料都把這一部分放到form 2.0 attribute來寫,但我認爲form override attributesform 2.0的結構是有非常重大的影響的,因此放到這一塊來敘述。

表單重寫屬性有:
formaction - 重寫表單的 action 屬性
formenctype - 重寫表單的 enctype 屬性
formmethod - 重寫表單的 method 屬性
formnovalidate - 重寫表單的 novalidate 屬性
formtarget - 重寫表單的 target 屬性

以一個例子來進行說明:

    <form action="demo_form.asp" method="get" id="user_form">
    E-mail: <input type="email" name="userid" /><br />
    <input type="submit" value="Submit" /> //普通的提交按鈕
    <br />
    <!--用這個按鈕來提交的時候,由於`formaction`重寫了表單的`action`屬性,因此該表單將會被提交到`demo_admin.asp`而非`demo_form.asp`-->
    <input type="submit" formaction="demo_admin.asp" value="Submit as admin" />
    <br />
    <!--用這個按鈕來提交的時候,由於`formnovalidate`重寫了表單的`novalidate`屬性,因此該表單在提交時將不會進行驗證-->
    <input type="submit" formnovalidate="true" value="Submit without validation" />
    <br />
    </form>

由此,可以利用form override attributes,設置多個提交按鈕來控制以不同的方式提交表單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章