Form 表單認識

瀏覽器可以通過 form 表單提交的方式向服務器發(fā)送數(shù)據(jù), 之前都沒有特別注意仔細了解下表單的相關屬性,表單控件相關特性,此文為參考別人博客的一個自我總結(jié),供后續(xù)參考。

form表單常用屬性:

  • action: url地址,服務器接受表單數(shù)據(jù)的地址;
  • method: 提交到服務器的 http 方法,一般為 post 和 get;
  • name: 最好保持 name 屬性唯一;
  • enctype: 表單數(shù)據(jù)提交時使用的編碼類型,默認使用"application/x-www-form-urlencoded",如果使用 post 方法,請求頭中 content-type指定值即為此屬性值。如果表單中有上傳文件的 input 控件,編碼類型需要使用"multipart/form-data", 才能完成傳遞文件數(shù)據(jù)。

表單提交規(guī)則:

  • 具有disabled屬性的字段不會被提交
  • 不具有name屬性的字段不會被提交
  • 同名的name屬性會發(fā)生覆蓋,radio和checkbox除外
  • form指向其他表單的字段,不會被本表單提交
表單元素 type 規(guī)則
input button 永遠不提交
input checkbox 只在勾選后提交
input file 永遠提交,即使為空值
input hidden 永遠提交,即使為空值
input image 永遠提交,即使為空值
input radio 只在勾選后提交,如果一組Radio沒有任何勾選,全部不提交。
input reset 永遠不提交
input submit 點擊哪個按鈕,則提交這個按鈕的值,其他的SUBMIT按鈕值都不提交。如果表單的提交行為是由JavaScript腳本觸發(fā)的,則不提交任何值。
input text 永遠提交,即使為空值
button button 永遠不提交
button reset 永遠不提交
button submit 點擊哪個按鈕提交表單,則提交這個按鈕的值。
textarea 永遠提交,即使為空值
select 永遠提交,即使為空值

瀏覽器提交表單時,會執(zhí)行如下步驟:

  1. 識別出表單中表單元素的有效項(即根據(jù)上述表單提交規(guī)則來確定)作為提交項(successfull controls)
  2. 構建一個表單數(shù)據(jù)集(form data set)
  3. 根據(jù) form 表單中 enctype 屬性的值作為 content-type對數(shù)據(jù)集進行編碼
  4. 根據(jù) form 表單中的 action 屬性和 method 屬性向指定的地址發(fā)送數(shù)據(jù)

提交方法一般用"post" 或 "get":

  1. get: 表單數(shù)據(jù)會被encodeURIComponent后以參數(shù)形式:name1=value1&name2=value2 附帶在 url?后面發(fā)送給服務器,并在url中顯示出來;
  2. post: content-type 默認"application/x-www-form-urlencoded" 對表單數(shù)據(jù)進行編碼,數(shù)據(jù)字段以鍵值對在 http請求體中發(fā)送給服務器;如果 enctype 屬性值為"multipart/form-data",則以消息的形式發(fā)送給服務器。

enctype 指定的 content-type有:

  1. application/x-www-form-urlencoded: 默認加密方式,name value pair以name=value&name2=value2形式提交,其中的特殊字符被轉(zhuǎn)義,具體見https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4;
  2. multipart/form-data: 一般用于提交文件,二進制數(shù)據(jù)。

表單序列化

通過JavaScript異步提交(ajax 提交)表單時,如果需要按照上面的規(guī)則去獲取表單數(shù)據(jù),jquery提供了 <span style="background-color: #FFFF00">serialize()</span>
和<span style="background-color: #FFFF00"> serializeArray()</span>
兩個方法。使用該方法會取得和原生表單一致的提交字段。

代碼示例

<form action="/api/form/submit" method="post" name="myForm">
      <input type="checkbox" name="checkbox" checked>
      <input type="checkbox" name="checkbox" checked>
      <select name="select">
        <option>option1</option>
        <option selected>option2</option>
        <option>option3</option>
      </select>
      <input type="text" name="text">
      <input type="radio" name="radio" checked>
      <button type="submit">提交表單</button>
    </form>
post 方法提交
get 方法提交
表單中有input type="file" 類型元素
<form action="/api/form/submit" method="get" name="myForm">
      <input type="checkbox" name="checkbox" checked>
      <input type="checkbox" name="checkbox" checked>
      <select name="select">
        <option>option1</option>
        <option selected>option2</option>
        <option>option3</option>
      </select>
      <input type="text" name="text">
      <input type="file" name="file">
      <input type="radio" name="radio" checked>
      <button type="submit">提交表單</button>
    </form>
has file
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 整體Retrofit內(nèi)容如下: 1、Retrofit解析1之前哨站——理解RESTful2、Retrofit解析2...
    隔壁老李頭閱讀 15,157評論 4 39
  • <input>標簽 標簽用于搜集用戶信息,根據(jù)不同的type屬性值,輸入字段擁有很多種形式。輸入字段可以是文本字段...
    _空空閱讀 4,078評論 0 3
  • 1.form表單有什么作用?有哪些常用的input 標簽,分別有什么作用? HTML 表單用于接收不同類型的用戶輸...
    大胡子歌歌閱讀 924評論 0 1
  • form簡介 是HTML中的一個元素,它表示文檔中的一個區(qū)域,這個區(qū)域包含了交互控件,用于向web服務器提交信息。...
    七里之境閱讀 1,350評論 0 1
  • 今天是超級雜亂無張的一天,很多意料外情況和工作發(fā)生, 計劃中的工作沒有做。雖然早上班一小時還是加班到八點多才離開公...
    SandyZhang_ce42閱讀 110評論 1 3