← HTML / CSS Course

WEB FOUNDATION · 45

HTML Forms:使用者輸入如何變成可提交資料

Form 不只是幾個 input。它定義資料欄位、label 關係、Browser validation 與 submit 行為;之後 JavaScript 或 server 才接手處理。

Learning outcomes

1. Form 是資料收集 boundary

<form>
  <label for="title">Course title</label>
  <input
    id="title"
    name="title"
    type="text"
    required
  >

  <button type="submit">
    Save
  </button>
</form>

id 讓 label/DOM selector 對應;name 通常代表 form submission 欄位 key。

2. Input type 表達資料意圖

<input type="email">
<input type="number" min="0" max="100">
<input type="date">
<input type="checkbox">

正確 type 能提供更合適的 Browser UI / validation,但不是 security boundary。

3. Select / textarea

<label for="level">Level</label>
<select id="level" name="level">
  <option value="beginner">Beginner</option>
  <option value="advanced">Advanced</option>
</select>

<label for="note">Note</label>
<textarea id="note" name="note"></textarea>

4. Submit 的 default behavior

傳統 form 會依 action/method 導航提交。之後 JavaScript lesson 會用 submit event + preventDefault() 改成 client-side handling。

<form
  action="/courses"
  method="post"
>
  ...
</form>

5. Browser validation 是 UX,不是 trust boundary

<input
  name="score"
  type="number"
  min="0"
  max="100"
  required
>

使用者可直接用 DevTools、curl、API client 繞過 HTML validation;server 必須重新驗證。

Project checkpoint:Course Profile v2

<form id="interest-form">
  <label for="email">Email</label>
  <input
    id="email"
    name="email"
    type="email"
    required
  >

  <label for="goal">Goal</label>
  <textarea
    id="goal"
    name="goal"
  ></textarea>

  <button type="submit">
    Join
  </button>
</form>

Debug evidence:按 button 就整頁 reload

先確認 button 在 form 裡是否默認 submit、form action/method 是什麼,以及 JavaScript submit handler 是否真的註冊/執行。不要一看到 reload 就先改 CSS。

Knowledge check

  1. id 和 name 的角色差在哪?
  2. placeholder 為什麼不能完整取代 label?
  3. HTML validation 為什麼不是 backend security?
  4. 完成 v2,故意移除 required 比較 Browser 行為。