` 容器**分組相關元素
- **用 `for` 與 `id` 屬性**關聯標籤與輸入
- **加入現代屬性**如 `autocomplete` 和 `placeholder` 改善使用者體驗
- **加上 `novalidate`**,改由 JavaScript 處理驗證,而非瀏覽器預設
### 正確標籤的重要性
**為何標籤對現代網頁開發很重要:**
```mermaid
graph TD
A[標籤元素] --> B[螢幕閱讀器支援]
A --> C[點擊目標擴大]
A --> D[表單驗證]
A --> E[SEO 益處]
B --> F[所有用戶可達]
C --> G[更佳的手機體驗]
D --> H[清晰的錯誤訊息]
E --> I[更好的搜尋排名]
```
**正確標籤的作用:**
- **讓螢幕閱讀器清楚宣告表格欄位**
- **擴大點擊區域(點擊標籤可聚焦輸入欄位)**
- **提升行動裝置使用體驗,觸控目標更大**
- **支援更有意義的錯誤訊息驗證**
- **增強 SEO,提供表格元素語意**
> 🎯 **無障礙目標**:每個輸入都應有相對應標籤。這個簡單做法讓你的表格對所有人都更友善,包括有障礙的使用者,並提升整體使用體驗。
### 建立註冊表格
註冊表格需要填寫較多詳細資料來建立完整帳號。讓我們用現代 HTML5 功能及加強無障礙性來建立它。
```html
` 中**以便更好地調整樣式和版面
- **加入適當的 `autocomplete` 屬性**以支援瀏覽器自動填入
- **包含實用的 placeholder 文字**指引用戶輸入
- **使用 `value` 設定合理預設值**
- **套用驗證屬性**如 `required`、`maxlength` 和 `min`
- **balance 欄位使用 `type="number"`**且支援小數點
### 探索輸入類型與行為
**現代輸入類型帶來的功能強化:**
| 功能 | 好處 | 範例 |
|---------|---------|----------|
| `type="number"` | 行動裝置數字鍵盤 | 較易輸入餘額 |
| `step="0.01"` | 小數點精度控制 | 支援貨幣分角 |
| `autocomplete` | 瀏覽器自動填入 | 更快填表 |
| `placeholder` | 背景提示 | 指導使用者預期 |
> 🎯 **無障礙挑戰**:嘗試僅用鍵盤操作表格!用 `Tab` 鍵移動欄位,`Space` 勾選多選框,`Enter` 送出。這可幫助你理解螢幕閱讀器使用者的互動模式。
### 🔄 **學習進度檢查**
**表格基礎理解**:在實作 JavaScript 前,請確保你知道:
- ✅ 怎樣用語義化 HTML 建立無障礙表格結構
- ✅ 輸入類型對行動鍵盤與驗證的重要性
- ✅ 標籤與表格控制元件的相互關係
- ✅ 表格屬性如何影響瀏覽器預設行為
**自我檢測題**:若沒有 JavaScript 管理,送出表格會發生什麼事?
*答案:瀏覽器進行預設提交,通常跳轉至 action 指定的 URL*
**HTML5 表格好處**:現代表格提供:
- **內建驗證**:自動檢查電郵及數字格式
- **行動優化**:依輸入類型調整鍵盤
- **無障礙**:支援螢幕閱讀器和鍵盤導航
- **漸進增強**:即使無 JavaScript 也可正常使用
## 理解表格提交方式
當有人填完你的表格並點擊提交時,資料需要被送到某處──通常是伺服器進行儲存。有幾種方式可以實現這點,了解何時使用可少很多麻煩。
讓我們看清楚按下「提交」按鈕時到底發生什麼。
### 預設表格行為
先看基本表格提交的表現:
**測試你現在的表格:**
1. 點擊你表格中的*註冊*按鈕
2. 觀察瀏覽器網址列的變化
3. 注意頁面重新載入且資料出現在 URL 中

### HTTP 方法比較
```mermaid
graph TD
A[表單提交] --> B{HTTP 方法}
B -->|GET| C[資料在網址]
B -->|POST| D[資料在請求主體]
C --> E[地址欄可見]
C --> F[資料大小有限]
C --> G[可加入書籤]
D --> H[網址隱藏]
D --> I[大容量資料]
D --> J[較安全]
```
**了解差異:**
| 方法 | 使用場景 | 資料位置 | 安全等級 | 大小限制 |
|--------|----------|---------------|----------------|-------------|
| `GET` | 搜尋查詢、篩選器 | URL 參數 | 低(可見) | 約 2000 字元 |
| `POST` | 使用者帳號、敏感資料 | 請求主體 | 較高(隱藏) | 無實際限制 |
**基本差異認識:**
- **GET**:在 URL 以查詢參數附加表格資料(適合搜尋操作)
- **POST**:將資料放在請求主體中(敏感資料時必須)
- **GET 限制**:大小有限制、資料可見、瀏覽器歷史會保存
- **POST 優勢**:容量大、資料隱藏、支援檔案上傳
> 💡 **最佳實務**:搜尋及篩選使用 `GET`,用戶註冊、登入與資料建立用 `POST`。
### 配置表格提交
讓我們配置註冊表格,透過 POST 與後端 API 正確通訊:
```html
```
**理解此強化驗證:**
- **結合** 必填欄位標示與說明文字
- **加入** `pattern` 屬性做格式驗證
- **附加** `title` 屬性供無障礙與工具提示
- **增加** 輔助文本指導使用者輸入
- **使用** 語意化 HTML 結構提升存取性
### 進階驗證規則
**各檢核規則意義:**
| 欄位 | 驗證規則 | 使用者利益 |
|-------|------------------|--------------|
| 使用者名稱 | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | 確保有效且唯一的標識 |
| 貨幣 | `required`, `maxlength="3"`, `pattern="[A-Z$€£¥₹]+"` | 接受常見貨幣符號 |
| 帳戶餘額 | `min="0"`, `step="0.01"`, `type="number"` | 防止負餘額 |
| 描述 | `maxlength="100"` | 合理長度限制 |
### 測試驗證行為
**試試這些驗證場景:**
1. **送出** 留空必填欄位
2. **使用** 少於 3 個字元的使用者名稱
3. **嘗試** 在使用者名稱內輸入特殊字元
4. **輸入** 負數餘額金額

**你會觀察到:**
- **瀏覽器呈現** 原生驗證訊息
- **樣式變化** 隨 `:valid` 和 `:invalid` 狀態變動
- **禁止表單送出** 直到所有驗證通過
- **焦點自動移至** 第一個無效欄位
### 客戶端與伺服器端驗證
```mermaid
graph LR
A[客戶端驗證] --> B[即時反饋]
A --> C[更佳用戶體驗]
A --> D[減輕伺服器負擔]
E[伺服器端驗證] --> F[安全性]
E --> G[數據完整性]
E --> H[業務規則]
A -.-> I[兩者均需]
E -.-> I
```
**你為何需要雙層驗證:**
- **客戶端驗證**:即時回饋並提升用戶體驗
- **伺服器端驗證**:保證安全並處理複雜商業規則
- **雙管齊下**:打造強健、用戶友善又安全的應用
- **漸進增強**:即便停用 JavaScript 仍可運作
> 🛡️ **安全提醒**:切勿只信任客戶端驗證!惡意使用者可繞過客戶端檢查,所以伺服器端驗證對安全與資料完整至關重要。
### ⚡ **接下來 5 分鐘你可以做什麼**
- [ ] 用錯誤資料測試表單,查看驗證訊息
- [ ] 嘗試關閉 JavaScript 後,提交表單體驗 HTML5 驗證
- [ ] 開啟瀏覽器開發工具,檢查送往伺服器的表單資料
- [ ] 嘗試多種輸入類型,觀察手機鍵盤變化
### 🎯 **本時段你能完成什麼**
- [ ] 完成本堂測驗,理解表單處理概念
- [ ] 實作全面驗證挑戰,加強即時回饋
- [ ] 添加 CSS 樣式,打造專業表單外觀
- [ ] 創建錯誤處理邏輯,應對重複用戶名與伺服器錯誤
- [ ] 新增密碼確認欄位及對應驗證
### 📅 **為期一週的表單精修旅程**
- [ ] 完成進階功能齊全的銀行應用表單
- [ ] 實作個人資料或文件上傳功能
- [ ] 加入多步驟表單,含進度指標與狀態管理
- [ ] 創建依用戶選擇動態變化的表單
- [ ] 實現表單自動保存與恢復提升體驗
- [ ] 實作進階驗證如 Email 驗證與電話格式化
### 🌟 **你的一個月前端表單開發精通**
- [ ] 開發具條件邏輯與工作流程的複雜表單應用
- [ ] 學習表單庫與框架加速開發
- [ ] 精通無障礙指引與包容性設計原則
- [ ] 實現國際化與本地化的全球化表單
- [ ] 創建可重用表單元件庫與設計系統
- [ ] 貢獻開源表單專案並分享最佳實踐
## 🎯 你的表單開發精通時程
```mermaid
timeline
title 表單開發與使用者體驗學習進度
section HTML 基礎 (15 分鐘)
語義表單: 表單元素
: 輸入類型
: 標籤與無障礙
: 漸進式增強
section JavaScript 整合 (25 分鐘)
事件處理: 表單提交
: 資料收集
: AJAX 通訊
: 非同步/等待模式
section 驗證系統 (35 分鐘)
多層安全: HTML5 驗證
: 客戶端邏輯
: 伺服器端驗證
: 錯誤處理
section 使用者體驗 (45 分鐘)
介面美化: 載入狀態
: 成功訊息
: 錯誤恢復
: 無障礙功能
section 進階模式 (1 週)
專業表單: 動態驗證
: 多步驟工作流程
: 檔案上傳
: 即時反饋
section 企業技能 (1 個月)
生產應用: 表單函式庫
: 測試策略
: 效能優化
: 安全最佳實務
```
### 🛠️ 你的表單開發工具包總結
學完本課程,你已掌握:
- **HTML5 表單**:語意結構、輸入類型與無障礙功能
- **JavaScript 表單處理**:事件管理、資料收集及 AJAX 通訊
- **驗證架構**:多層驗證保障安全與使用者體驗
- **非同步程式設計**:現代 fetch API 與 async/await 模式
- **錯誤管理**:全面錯誤處理與用戶回饋系統
- **使用者體驗設計**:加載狀態、成功訊息及錯誤復原
- **漸進增強**:跨瀏覽器與能耐皆適用之表單
**實務應用**:你的表單開發技能直接適用於:
- **電子商務**:結帳流程、帳戶註冊與付款表單
- **企業軟體**:資料輸入系統、報表介面與工作流程應用
- **內容管理**:發佈平台、用戶產生內容與管理介面
- **金融應用**:銀行介面、投資平台與交易系統
- **醫療系統**:病患入口網站、預約排程與醫療紀錄表單
- **教育平台**:課程註冊、評估工具與學習管理
**專業技能**:你現在能:
- **設計** 適用於所有用戶(含身障者)的可存取表單
- **實作** 安全驗證,預防資料損毀與安全漏洞
- **打造** 提供明確回饋與指導的響應介面
- **除錯** 複雜表單互動,使用瀏覽器開發工具及網路分析
- **優化** 表單效能,透過高效資料處理與驗證策略
**前端開發概念精通:**
- **事件驅動架構**:用戶交互處理與回應系統
- **非同步程式設計**:非阻塞伺服器通訊與錯誤管理
- **資料驗證**:客戶端與伺服器端安全完整性檢查
- **使用者體驗設計**:引導用戶成功的直覺介面
- **無障礙工程**:滿足多元用戶需求的包容設計
**下一階段**:你已準備好探索進階表單庫、實作複雜驗證規則,或打造企業級資料蒐集系統!
🌟 **成就解鎖**:你已完成一套完整表單處理系統,具備專業驗證、錯誤處理與使用者體驗模式!
---
---
## GitHub Copilot Agent 挑戰 🚀
使用 Agent 模式完成以下挑戰:
**說明:** 強化註冊表單,實現全面的客戶端驗證與用戶回饋。此挑戰將幫助你練習表單驗證、錯誤處理與透過互動式反饋提升使用者體驗。
**提示:** 建立一個完整的註冊表單驗證系統,包含:1) 使用者輸入時每個欄位即時驗證反饋,2) 自訂驗證訊息顯示於每個輸入欄位下方,3) 密碼確認欄位及配對驗證,4) 視覺指示器(如對有效欄位顯示綠色勾勾,對無效欄位顯示紅色警告),5) 僅在所有驗證通過後,送出按鈕才會啟用。使用 HTML5 驗證屬性、CSS 來設計驗證狀態樣式,並用 JavaScript 實作互動行為。
在此了解更多關於 [agent 模式](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) 。
## 🚀 挑戰
若使用者已存在,請在 HTML 顯示錯誤訊息。
以下是簡單美化後的最終登入頁面範例:

## 課後小測驗
[課後小測驗](https://ff-quizzes.netlify.app/web/quiz/44)
## 複習與自學
開發者在表單建置特別是驗證策略上很有創意。試著在 [CodePen](https://codepen.com) 上瀏覽,能否發現一些有趣且有啟發性的表單?
## 作業
[美化你的銀行應用程式](assignment.md)
---
**免責聲明**:
本文件是使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們努力確保準確性,但請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應視為權威來源。對於重要資訊,建議採用專業人工翻譯。我們對因使用本翻譯而產生的任何誤解或誤釋概不負責。