測(cè)試同事提了個(gè)bug,說(shuō)表單提交不了了,并報(bào)了下面的錯(cuò)誤。

習(xí)慣性拿著錯(cuò)誤信息Google一下,看到答案是,在form標(biāo)簽中增加novalidate 屬性。加上novalidate 屬性后,果然錯(cuò)誤沒有了。于是直接提交代碼測(cè)試。
沒多久,測(cè)試同事跑過來(lái)說(shuō),現(xiàn)在表單沒法驗(yàn)證,必填項(xiàng)沒有輸入,提交表單不會(huì)有提示,于是試著把novalidate 屬性去掉,結(jié)果驗(yàn)證就出來(lái)了。

一番折騰后明白了表單提交不了,是其他問題導(dǎo)致的,跟novalidate 屬性沒有關(guān)系。那novalidate 屬性到底是干啥呢?Google研究一下,整理form屬性如下:
novalidate:指定瀏覽器不去驗(yàn)證form表單。(HTML5新增屬性)
autocomplete:指定瀏覽器是否自動(dòng)完成表單,默認(rèn):on,也可以設(shè)置autocomplete=off。(HTMl5新增屬性)
enctype:指定發(fā)送服務(wù)器前應(yīng)該如何對(duì)表單數(shù)據(jù)進(jìn)行編碼。
action:指定表單提交的地址,默認(rèn)當(dāng)前頁(yè)。
method:提交表單使用的HTTP方法,默認(rèn):GET。
name:指定識(shí)別表單的名稱,例如在DOM中使用:document.forms.name。
target:action屬性的目標(biāo)地址,指定在何處打開表單中的action-URL,默認(rèn):_seft。
accept-charset:提交表單所使用的字符集,HTML5默認(rèn)字符集為UTF-8。
具體使用方法:
novalidate:
novalidate屬性是一個(gè)boolean 值屬性,novalidate=true,如果form表單數(shù)據(jù)是不符合要求的,用戶想要保存表單數(shù)據(jù),可以使用novalidate屬性。
下面的例子,設(shè)置novalidate,如果input輸入text文本類型的值,瀏覽器不會(huì)報(bào)錯(cuò)。
<form action="" novalidate? >
E-mail: <input type="email" name="user_email">
<input type="submit">
</form>??
注意:novalidate 屬性也適用于以下類型的 <input> 標(biāo)簽:text, search, url, telephone, email, password, date pickers, range 以及 color。
autocomplete:
默認(rèn)情況下,瀏覽器能夠記住用戶通過input框提交的信息,這使得瀏覽器可以完成自動(dòng)填充功能。瞬間想到,應(yīng)該類似于可以看到瀏覽器的歷史記錄功能。默認(rèn)autocomplete=on,如果不想要瀏覽器記錄這些信息,可以設(shè)置autocomplete=off。
<form action="/action_page.php" method="get" autocomplete="off">
? First name:<input type="text" name="fname">
? <input type="submit">
</form>
<input type="text" name="fname" autocomplete="off">
注意:autocomplete屬性也適用于input標(biāo)簽。
enctype:
默認(rèn):application/x-www-form-urlencoded
當(dāng)method=‘post’時(shí),enctype有以下幾種取值:? ?
application/x-www-form-urlencoded:在發(fā)送HTTP請(qǐng)求錢編碼所有字符(空格被編碼為‘+’,特殊字符被編碼為ASCII十六進(jìn)制字符)
multipart/form-data:不對(duì)字符編碼,當(dāng) input type 是 "file" 時(shí),必須使用該值。
text/plain:空格轉(zhuǎn)換為‘+’,不對(duì)特殊字符編碼。
<form action="/action_page.php" method="post" enctype="multipart/form-data">
? name: <input type="text" name="name"><br>
? upload: <input type="file" name="file"><br>
? <input type="submit" value="Submit">
</form>
method:
瀏覽器通過method屬性設(shè)置的方法將表單中的數(shù)據(jù)傳送給服務(wù)器進(jìn)行處理,共有兩種方法:GET和POST。
method 方法規(guī)定如何發(fā)送表單數(shù)據(jù)(form-data)(表單數(shù)據(jù)會(huì)被發(fā)送到在 action 屬性中規(guī)定的頁(yè)面中)。
可以通過以下方式發(fā)送 form-data :
以 URL 變量 (使用 method="get") 的形式來(lái)發(fā)送
以 HTTP post (使用 method="post") 的形式來(lái)發(fā)送
關(guān)于 "get" 方法的注釋:
該方法將表單數(shù)據(jù)以名稱/值對(duì)的形式附加到 URL 中
該方法對(duì)于用戶希望加入書簽的表單提交很有用
在 URL 中放置的數(shù)據(jù)量是有限制的(不同的瀏覽器有差別),所以無(wú)法確保所有表單數(shù)據(jù)得到正確地傳輸
絕不要使用 "get" 方法來(lái)傳輸敏感信息!(密碼或其他敏感信息在瀏覽器地址欄中是可見的)
關(guān)于 "post" 方法的注釋:
該方法以 HTTP post 事務(wù)的方式來(lái)傳遞表單數(shù)據(jù)
無(wú)法將通過 "post" 方法提交的表單加入書簽
與 "get" 相比,"post" 方法更健壯更安全,而且 "post" 沒有容量限制
target:
target有以下取值:
_blank:在新窗口打開。
_self:默認(rèn),在相同的窗口載入action請(qǐng)求。
_parent:在父窗口打開。
_top:在整個(gè)窗口中打開。
framename:在指定的框架中打開。
執(zhí)行下面的代碼,切換不同的值,查看效果
<form action="/action_page.php" method="get" target="_self">
? First name: <input type="text" name="fname"><br>
? Last name: <input type="text" name="lname"><br>
? <input type="submit" value="Submit">
</form>