LESSON-18 · SELF-PACED PRACTICE

表單驗證與可恢復非同步狀態

把「表單驗證與可恢復非同步狀態」拆成 4 個可獨立完成、可重設、可驗證的自主學習 module。

4個獨立主題3個練習階段1個整合挑戰
看見缺口 → 修改一小段 → 重新載入驗收

每一個 topic 都有自己的檔案、Starter、Checkpoint、Solution 與證據清單。

先知道今天要做什麼

不要從長篇名詞開始;先從第一個可完成的小任務開始。

01

選一個 topic

從第一張卡開始,先閱讀任務情境與預期畫面。

02

修改自己的檔案

打開 Starter 的實作檔,依 Step 逐步修改,不靠按鈕代做。

03

用證據驗收

重新整理頁面,對照畫面、DOM、Computed、Console 或文件證據。

4 個獨立主題

每張卡只練一個責任;完成後再進入下一張。

01

FormData 與 successful controls

能從 form 建立 FormData,並解釋只有具 name、未 disabled 且符合成功控制項規則的欄位會進入 payload。

要修改:files/starter/contact.html

02

checkValidity() 與 reportValidity()

能先用 checkValidity() 取得整體 Boolean,再在需要使用者修正時用 reportValidity() 顯示瀏覽器提示。

要修改:files/starter/main.js

03

防止重複送出

能用 in-flight 狀態與 disabled 控制,讓快速連按兩次只建立一個送出工作,結束後恢復操作。

要修改:files/starter/main.js

04

AbortController timeout 與錯誤分類

能在逾時時中止工作,將 AbortError 分類成 timeout,並保證 finally 恢復按鈕與 busy 狀態。

要修改:files/starter/main.js

最後整合挑戰

把已完成的責任轉回本章完整作品,不把整合步驟冒充成單項教學。

在同一份章節作品中整合 4 個 module,排除單項通過但組合失敗的問題。

完成具原生驗證、單一送出、timeout 與可恢復錯誤狀態的表單。

第一個建議動作

如果你現在只想知道下一步,先做這件事。

開啟「FormData 與 successful controls」:先看 files/starter/contact.html 的 先用 [...new FormData(form).entries()] 直接看實際 key/value,不先猜後端問題。,記錄目前狀態,再修改一小段。