04: Forms & Semantic HTML
การสร้างฟอร์มเพื่อส่งข้อมูลไป Server และการเขียน HTML ให้มีความหมาย (SEO)
1. Forms Elements พื้นฐาน
ฟอร์มคือหัวใจของการโต้ตอบ (Interactive) เป็นวิธีหลักในการส่งข้อมูลจากผู้ใช้ไปยัง Server
ส่วนประกอบสำคัญ
<form>: กล่องใหญ่ที่หุ้ม Input ทั้งหมดaction="...": ส่งข้อมูลไปที่ไหน (URL ของ API)method="...": ส่งด้วยวิธีไหน (GETเพื่อค้นหา,POSTเพื่อบันทึกข้อมูล)
<label>: ป้ายกำกับช่องกรอก (ต้องใช้คู่กับidของ input เพื่อให้กดที่ตัวหนังสือแล้วเคอร์เซอร์ไปกระพริบในช่อง)<button type="submit">: ปุ่ม "ยืนยัน/ส่งข้อมูล" (คลิกแล้วจะส่งฟอร์มทันที)<button type="reset">: ปุ่ม "ล้างค่า" (คืนค่าเริ่มต้นของฟอร์ม)
<form action="/api/register" method="POST">
<label for="username">ชื่อผู้ใช้:</label>
<input type="text" id="username" name="username">
<button type="submit">สมัครสมาชิก</button>
<button type="reset">ล้างค่า</button>
</form>
2. Input Types & Attributes
Tag <input> เป็น Empty Tag ที่แปลงร่างได้หลายแบบตาม attribute
type
กลุ่มข้อความ (Text-based)
<input type="text" placeholder="ชื่อ-สกุล">
<input type="password">
<input type="email">
<input type="number" min="1" max="10">
กลุ่มตัวเลือกและพิเศษ
| Type | คำอธิบาย | ตัวอย่างโค้ด |
|---|---|---|
radio |
เลือกได้ 1 อย่าง (ต้องมี name เหมือนกัน) |
|
checkbox |
เลือกได้หลายอย่าง |
|
file |
อัปโหลดไฟล์ |
|
color / date |
เลือกสี / วันที่ |
|
Common Attributes
name = "..." (สำคัญมาก)
ใช้ตั้งชื่อตัวแปรเพื่อส่งข้อมูลไปที่ Server
placeholder
ข้อความจาง ๆเพื่อบอกใบ้สิ่งที่ต้องกรอก
required
บังคับกรอก!ถ้าว่างไว้จะกดส่งไม่ได้
readonly
อ่านได้อย่างเดียว แก้ไม่ได้(ยังส่งค่าไป Server)
disabled
ปิดการใช้งาน กดไม่ได้และ ไม่ส่งค่า ไป Server
3.Elements อื่นๆ ในฟอร์ม
Dropdown List (Select)
สำหรับตัวเลือกที่เยอะๆ ประหยัดพื้นที่
<select name="job">
<option value="">-- กรุณาเลือก --</option>
<option value="frontend">Frontend Dev</option>
<option value="backend">Backend Dev</option>
</select>
Text Area
สำหรับข้อความยาวๆ เช่น ที่อยู่, คอมเมนต์
<textarea name="message" rows="4" placeholder="พิมพ์ข้อความที่นี่..."></textarea>
Generic Buttons (ปุ่มกดทั่วไป)
ปุ่มที่กดแล้ว ไม่ส่งฟอร์ม (ต้องใส่ type="button") มักใช้เขียน JavaScript สั่งงานเอง
แบบที่ 1: Button Element (แนะนำ)
ยืดหยุ่นกว่า ใส่รูป/ไอคอนข้างในได้
<button type="button" onclick="alert('Hi')">
<i class="fa-solid fa-star"></i> กดฉันสิ
</button>
แบบที่ 2: Input Button (แบบเก่า)
ข้อความต้องใส่ใน value เท่านั้น
<input type="button" value="กดฉันสิ" onclick="alert('Hi')">
4. Semantic HTML (โครงสร้างที่มีความหมาย)
โดยปกติแล้วการเพิ่มส่วนของเนื้อหาใน HTML มักจะใช้ <div> ทำทุกอย่าง แต่ HTML5 มี Tag พิเศษที่บอก
"ความหมาย" ของส่วนนั้นๆ เพื่อให้ Google (SEO) และโปรแกรมอ่านหน้าจอ (Screen Reader) เข้าใจโครงสร้างเนื้อหาของหน้าเว็บ
แถบข้าง
<body>
<header>
<h1>My Website</h1>
<nav>...</nav>
</header>
<main>
<article>
<h2>บทความที่ 1</h2>
<p>เนื้อหา...</p>
</article>
</main>
<aside>โฆษณา / ลิงก์แนะนำ</aside>
<footer>© 2026</footer>
</body>
Workshop: ใบสมัครงานออนไลน์
สร้างไฟล์ job-application.html
โดยจำลองฟอร์มสมัครงานบริษัท Tech ต้องมีช่องกรอกดังนี้:
- ชื่อ-นามสกุล (บังคับใส่ข้อมูล)
- อีเมล (บังคับใส่ข้อมูล)
- รหัสผ่าน (บังคับใส่ข้อมูล)
- วันเกิด
- ตำแหน่งงาน (Dropdown List)
- เพศ (Radio: ชาย/หญิง)
- เรซูเม่ (File: PDF only)
- แนะนำตัว (Textarea)
Practice Mission: ใบสมัครงานออนไลน์ "Dev Hunter"
บรีฟจาก HR Manager:
"ทางทีมกำลังขยายตัว อยากให้คุณช่วยทำหน้า 'ร่วมงานกับเรา (Join Us)' ให้หน่อย ขอแบบเรียบง่ายแต่โครงสร้างถูกต้อง (Semantic HTML) เพื่อให้ Google เก็บข้อมูลได้ดี โดยหน้าเว็บต้องมีรายละเอียดตามนี้.."
1. โครงสร้างหน้าเว็บ (Semantic Tags)
ต้องแบ่งส่วนหน้าเว็บให้ชัดเจนโดยใช้ Tag ดังนี้:
<header>: ส่วนหัว (โลโก้ + เมนู)<main>: ส่วนเนื้อหาหลัก (ประกาศรับสมัคร + ฟอร์ม)<footer>: ส่วนท้าย (ลิขสิทธิ์ + ติดต่อ)
2. เนื้อหา (Header & Info)
- Header: ใส่ชื่อบริษัท "Dev Hunter" และลิงก์เมนู (Home, Jobs, Contact)
- Job Detail: สร้างหัวข้อ "รับสมัคร Web Developer" และใช้ List บอกคุณสมบัติ 3 ข้อ (เช่น เขียน HTML ได้, ชอบกินกาแฟ)
3. แบบฟอร์มใบสมัคร (Forms)
สร้างฟอร์มโดยใช้ <form> ที่มี Input ครบทุกประเภทดังนี้:
- ชื่อ-นามสกุล
- อีเมล
- ตำแหน่งที่สมัคร ใช้ Dropdown list (Frontend, Backend, Fullstack)
- ระดับประสบการณ์: ใช้ Radio button (Junior, Senior)
- ทักษะที่มี: ใช้ Checkbox (HTML, CSS, JS)
- แนะนำตัวเอง: ใช้ Textarea