HTML 表單(`
<form action="/api/login" method="post"> <!-- 所有控件必須放在 form 內,否則無法隨表單提交 --> </form>
action
method
enctype
novalidate
<form action="/login" method="post"> <label for="username">帳號:</label> <input type="text" id="username" name="username" placeholder="請輸入帳號" required><br><br> <label for="pwd">密碼:</label> <input type="password" id="pwd" name="password" placeholder="請輸入密碼" required><br><br> <input type="submit" value="登入"> </form>
關鍵屬性:name (提交鍵名)、value (預設值)、placeholder (提示文字)、required (必填)、maxlength、autocomplete。
name
value
placeholder
required
maxlength
autocomplete
<form action="/profile" method="post"> <label for="bio">個人簡介:</label><br> <textarea id="bio" name="bio" rows="6" cols="50" placeholder="在此輸入...">預設內容</textarea><br> <input type="submit" value="送出"> <input type="reset" value="重置"> </form>
rows/cols 設定可見行列數;CSS `resize: vertical/horizontal/both/none` 控制可否拖拽調整大小。
rows
cols
<form action="/survey" method="post"> <fieldset> <legend>您喜歡旅遊嗎?</legend> <label><input type="radio" name="travel" value="like" checked> 喜歡</label> <label><input type="radio" name="travel" value="dislike"> 不喜歡</label> <label><input type="radio" name="travel" value="neutral"> 無所謂</label> </fieldset><br> <fieldset> <legend>喜歡的運動 (可多選):</legend> <label><input type="checkbox" name="sports" value="run" checked> 跑步</label> <label><input type="checkbox" name="sports" value="swim"> 游泳</label> <label><input type="checkbox" name="sports" value="bike"> 騎車</label> <label><input type="checkbox" name="sports" value="yoga"> 瑜伽</label> </fieldset><br> <input type="submit" value="提交"> </form>
核心規則:同組 `` **必須共用相同 `name`** 才能互斥;`` 同名提交時後端接收陣列/逗號分隔字串;`` 包裹或 `for=id` 綁定,點擊文字即可選中,提升可用性。
<form action="/pref" method="post"> <label for="hobby">興趣:</label> <select id="hobby" name="hobby"> <option value="read">閱讀</option> <option value="travel" selected>旅遊</option> <!-- 預設選中 --> <option value="sport">運動</option> <option value="shop">購物</option> </select><br><br> <label for="msg">留言:</label><br> <textarea id="msg" name="message" rows="4" cols="40"></textarea><br> <input type="submit" value="送出留言"> </form>
<select id="hobbies" name="hobbies" multiple size="4"> <option value="read">閱讀</option> <option value="travel">旅遊</option> <option value="sport">運動</option> <option value="shop">購物</option> </select> <small>按住 Ctrl (Win) / Command (Mac) 點擊可多選</small>
`size` 指定可見行數;`multiple` 為布林屬性。提交時同名多值,後端需按陣列處理。
<input type="submit" value="提交表單"> <!-- 或 --> <button type="submit"><strong>提交</strong> 表單</button>
<button> 內容可包含 HTML(圖標、粗體),樣式彈性更大;`type="submit"` 為預設,表單內無需明寫。
<button>
<input type="reset" value="重置表單"> <!-- 點擊後所有控件恢復初始 value/checked/selected 狀態 -->
⚠️ 重置是**還原初始值**,非清空。若需清空,請用 JS:`form.reset()` 後再遍歷 `value = ''`。
<form> <label for="male">男</label> <input type="radio" name="gender" id="male" value="M"><br> <label for="female">女</label> <input type="radio" name="gender" id="female" value="F"><br> <label for="email">Email:</label> <input type="email" id="email" name="email" placeholder="name@example.com"><br> <fieldset> <legend>運動偏好:</legend> <label><input type="checkbox" name="sport" id="run" value="run"> 跑步</label><br> <label><input type="checkbox" name="sport" id="swim" value="swim"> 游泳</label><br> <label><input type="checkbox" name="sport" id="bike" value="bike"> 騎車</label> </fieldset> </form>
兩種綁定方式:
綁定後:點擊 Label 文字 → 焦點自動移至關聯控件 → 螢幕閱讀器正確朗讀標籤 → 觸控裝置點擊區域擴大。
<!DOCTYPE html> <html lang="zh-TW"> <head> <meta charset="UTF-8"> <title>會員註冊</title> <style> form { max-width: 400px; margin: 2rem auto; font-family: sans-serif; } label { display: block; margin: 0.8rem 0 0.2rem; font-weight: bold; } input, select, textarea { width: 100%; padding: 0.5rem; box-sizing: border-box; } button { margin-top: 1rem; padding: 0.6rem 1.2rem; background: #0066cc; color: #fff; border: none; border-radius: 4px; cursor: pointer; } button:hover { background: #0052a3; } .inline { display: inline-block; width: auto; margin-right: 1rem; } fieldset { border: 1px solid #ddd; border-radius: 4px; padding: 0.5rem 1rem; } </style> </head> <body> <form action="/api/register" method="post" novalidate> <label for="uname">用戶名</label> <input type="text" id="uname" name="username" required minlength="3" maxlength="16" placeholder="3-16 字元"> <label for="pwd">密碼</label> <input type="password" id="pwd" name="password" required minlength="8" placeholder="至少 8 字元"> <label for="email">Email</label> <input type="email" id="email" name="email" required placeholder="name@example.com"> <label>性別</label> <fieldset> <label class="inline"><input type="radio" name="gender" value="M" required> 男</label> <label class="inline"><input type="radio" name="gender" value="F"> 女</label> <label class="inline"><input type="radio" name="gender" value="O"> 其他</label> </fieldset> <label for="hobbies">興趣 (可多選)</label> <select id="hobbies" name="hobbies" multiple size="4"> <option value="code">程式設計</option> <option value="read">閱讀</option> <option value="music">音樂</option> <option value="game">遊戲</option> <option value="sport">運動</option> </select> <label for="bio">自我介紹</label> <textarea id="bio" name="bio" rows="4" placeholder="簡單介紹自己..."></textarea> <button type="submit">註冊</button> <button type="reset" style="background:#999;">重置</button> </form> </body> </html>
GET
POST
HTML 表單看似基礎,實則細節決定體驗:正確的 `` 綁定、語義化的 `/`、適當的 `type` (email/tel/url/number/date) 觸發原生鍵盤/驗證、`required`/`pattern` 降低無效提交、`autocomplete` 協助瀏覽器自動填充。掌握本文九大控件與綜合範例,即可構建無障礙、語義化、易維護的現代 Web 表單。
正則表達式是文本處理的「瑞士軍刀」。Java 1.4 前無原
Java 集合框架四大板塊 Java 集合工具包(java.
本文通過一個「生成 4 位不重複字符驗證碼」的完整案例,串講
問題現象 手動添加 Struts JAR 包後,雙擊 str