今天開始講述表單這個重要模塊
可以說,JS 最早是為表單而發明的, 因此在沒有JS之前,所有操作都需要提交后端驗證,發現有誤再重定向回原頁面, 加上之前1,2KB的網速,這用戶體驗真是奇差無比.因此JS最初發明出來,就是做表單驗證的.
圍繞表單,添加了各種語義化的元素,事件,屬性.
比如說label,在某個radio外圍上它,既能說明它是什么東西,也能擴大點擊范圍
比如說fieldset,它擁有默認的框框,方便圈定某個區域,表明這里面的東西是表單(form本身默認不可見, 而CSS要在稍晚的時候才發明出來)
比如說, onchange, oninput, onsubmit等事件,提交與用戶交互的友好度
比如說, readOnly, disabled, checked, 為表單元素增加各種狀態.
我們可以給一個定義,何謂表單元素 ?就是能向后端提供數據的元素
而這些元素通過都放在form元素中,但如果將它們單個拎出來,這個不好判定,我們還可以通過其他"外觀"特征獲得,就是它們的tagName都是input, button, select, textarea.其實option元素也算是表單元素,但它的數據需要提交到select 元素 進行過濾,才能提交
function isFormElement(el){return /input|button|select|textarea/i.test(el.tagName)
}
在HTML5中,還添加類似datalist, output等元素, 但它們只是輔助設施,沒有直接給form提交數據的能力,因此不算是表單元素.
form元素作為AJAX出現前唯一的提交通道,我們在這里著重說一下
它上面擁有如下屬性
屬性 | 值 | 描述 |
accept | MIME_type | 規定通過文件上傳來提交的文件的類型 |
accept-charset | charset | 服務器處理表單數據所接受的字符集 |
enctype | MIME_type | 規定表單數據在發送到服務器之前應該如何編碼 |
method | get/post | 規定表單數據發送的方式,get方法和post方法 |
name | name | 規定表單的名稱 |
target | _blank/_parent/_self/_top | 規定在何處打開action URL |
其中三個重要屬性說明一下:
1、action指定該表單發送時接受操作的地址
2、method指定表單數據發送的方法。可選值:get、post。get發送則表單內的數據將附加到url后發送。post則是在HTTP請求中發送。
3、enctype指定表單數據在發送的服務器之前如何編碼,特別注意的是,當含有上傳域時要設置編碼方式為enctype="multipart/form-data",否則后臺無法獲取到瀏覽器發送的文件數據。是設置表單的MIME編碼。默認情況,這個編碼格式是application/x-www-form-urlencoded,不能用于文件上傳;只有使用了multipart/form-data,form里面的input的值以2進制的方式傳過去。才能完整的傳遞文件數據。FTP上傳大文件的時候,也有個選項是以二進制方式上傳。
表單里面的元素布置有一定的要求,如form里面一定放著fieldset, fielset里面包著legend, label包著說明文字與input, textearea...., label里要指定tabindex,就是tab切換的順序。
health information height: weight: 不同的表單擁有不同的外形,它們的用法也各有不同,序列化數據也不一樣,因此我們將分開以下幾種細細討論.
輸入系, 選擇系, 下拉系, 搭車系, 圖形系