以往的一個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 attributes
對form 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
,設置多個提交按鈕來控制以不同的方式提交表單。