แอตทริบิวต์ novalidate
ปิดการตรวจสอบของเบราว์เซอร์เมื่อจัดการการตรวจสอบด้วยตนเอง
แอตทริบิวต์ novalidate เป็นบทเรียน HTML Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน HTML Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส HTML Academy มีบทเรียนทั้งหมด 4 บทเรียน
ข้อจำกัดของการตรวจสอบความถูกต้องโดยเบราว์เซอร์
การตรวจสอบความถูกต้องในตัวของ HTML5 มีข้อจำกัดดังนี้:
- ข้อความข้อผิดพลาดขึ้นอยู่กับเบราว์เซอร์และปรับรูปแบบได้ยาก
- การตรวจสอบจะทำงานเฉพาะเมื่อส่งแบบฟอร์ม ไม่ทำงานเมื่อออกจากช่องหรือเมื่อป้อนข้อมูล
- ไม่สามารถตรวจสอบกฎทางธุรกิจที่ซับซ้อนได้ เช่น รหัสผ่านตรงกันหรือ username ไม่ซ้ำ
เมื่อต้องการควบคุมทุกอย่าง ให้ปิดการตรวจสอบในตัวด้วย novalidate
novalidate บน form
การเพิ่ม novalidate ลงในแบบฟอร์มจะปิดการตรวจสอบทั้งหมดของเบราว์เซอร์:
<form action="/register" method="post" novalidate>
<!-- Browser will NOT validate these on submit -->
<input type="email" name="email" required>
<input type="password" name="password" minlength="8" required>
<button type="submit">Register</button>
</form>เหตุผลที่ใช้ novalidate
เหตุผลทั่วไปในการปิดการตรวจสอบของเบราว์เซอร์:
- กำหนดรูปแบบข้อความข้อผิดพลาดเองให้สอดคล้องกับระบบการออกแบบ
- ตรวจสอบแบบเรียลไทม์ เมื่อออกจากช่องหรือเมื่อป้อนข้อมูล ไม่ใช่เฉพาะตอนส่งแบบฟอร์ม
- ตรวจสอบหลายช่อง เช่น การยืนยันรหัสผ่าน
- แสดงข้อผิดพลาดจากเซิร์ฟเวอร์หลังการเปลี่ยนเส้นทาง
- ใช้ไลบรารีตรวจสอบความถูกต้องจากบุคคลที่สาม เช่น Zod, Yup และ React Hook Form
รูปแบบการตรวจสอบความถูกต้องแบบกำหนดเอง
สร้างการตรวจสอบความถูกต้องแบบกำหนดเองด้วย novalidate:
<form id="form" novalidate>
<label for="email">Email</label>
<input type="email" id="email" name="email" required>
<span class="error" id="email-error" role="alert" hidden></span>
<button type="submit">Submit</button>
</form>
<script>
document.getElementById('form').addEventListener('submit', (e) => {
e.preventDefault();
const email = document.getElementById('email');
const error = document.getElementById('email-error');
if (!email.value || !email.value.includes('@')) {
error.textContent = 'Please enter a valid email address.';
error.hidden = false;
email.focus();
} else {
error.hidden = true;
// Submit...
}
});
</script>formnovalidate บนปุ่ม
ปิดการตรวจสอบสำหรับปุ่มส่งแบบฟอร์มเฉพาะปุ่ม โดยไม่ต้องใส่ novalidate ในแบบฟอร์มทั้งหมด:
<form action="/save" method="post">
<input type="email" name="email" required>
<!-- Save as draft: skip validation -->
<button type="submit" formaction="/save-draft" formnovalidate>
Save Draft
</button>
<!-- Final submit: normal validation -->
<button type="submit">Submit</button>
</form>การกำหนดรูปแบบข้อผิดพลาดเอง
การกำหนดรูปแบบข้อผิดพลาดจากการตรวจสอบแบบกำหนดเอง:
.field-error {
color: #ef4444;
font-size: 0.875rem;
margin-top: 0.25rem;
display: flex;
align-items: center;
gap: 0.25rem;
}
input.invalid {
border-color: #ef4444;
box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.15);
}
input.valid {
border-color: #22c55e;
}ข้อผิดพลาดแบบกำหนดเองที่เข้าถึงได้
ทำให้ข้อความข้อผิดพลาดแบบกำหนดเองเข้าถึงได้:
<label for="email">Email</label>
<input
type="email"
id="email"
name="email"
aria-describedby="email-error"
aria-invalid="false"
>
<span id="email-error" role="alert"></span>
<!-- aria-invalid="true" when invalid -->
<!-- role="alert" announces changes to screen readers -->
<!-- aria-describedby links the input to its error message -->กลยุทธ์กำหนดเวลาตรวจสอบความถูกต้อง
เวลาที่ควรตรวจสอบด้วย novalidate:
- เมื่อส่งแบบฟอร์ม — ง่ายที่สุด ตรวจสอบทุกอย่างพร้อมกัน
- เมื่อออกจากช่อง — ตรวจสอบแต่ละช่องเมื่อผู้ใช้เลื่อนออกจากช่องนั้น
- เมื่อป้อนข้อมูล — แบบเรียลไทม์ ให้ประสบการณ์ผู้ใช้ดีที่สุด แต่อาจรู้สึกเร่งรัดเกินไป
- แบบผสม — ตรวจสอบเมื่อออกจากช่อง และล้างข้อผิดพลาดเมื่อป้อนข้อมูล
รูปแบบผสมระหว่างการออกจากช่องและการป้อนข้อมูล
แนวทางตรวจสอบความถูกต้องที่เป็นมิตรต่อผู้ใช้ที่สุด:
function validateEmail(input, errorEl) {
const val = input.value.trim();
if (!val) {
showError(input, errorEl, 'Email is required.');
} else if (!/^[^@]+@[^@]+\.[^@]+$/.test(val)) {
showError(input, errorEl, 'Enter a valid email address.');
} else {
clearError(input, errorEl);
}
}
input.addEventListener('blur', () => validateEmail(input, errorEl));
input.addEventListener('input', () => {
// Only clear the error while typing, don't re-validate until blur
if (input.classList.contains('invalid')) validateEmail(input, errorEl);
});novalidate และการตรวจสอบฝั่งเซิร์ฟเวอร์
ตรวจสอบความถูกต้องที่ฝั่งเซิร์ฟเวอร์เสมอด้วย:
- การตรวจสอบฝั่งไคลเอนต์มีไว้เพื่อประสบการณ์ผู้ใช้
- การตรวจสอบฝั่งเซิร์ฟเวอร์มีไว้เพื่อความปลอดภัย
- ผู้ใช้สามารถหลีกเลี่ยงการตรวจสอบของ HTML ได้ด้วยการแก้ไขคำขอ
- การตรวจสอบแบบกำหนดเองด้วย novalidate และ JS ควรมีกฎสอดคล้องกับเซิร์ฟเวอร์
ไลบรารีตรวจสอบความถูกต้อง
ไลบรารีตรวจสอบความถูกต้องยอดนิยมของ JavaScript ที่ใช้คู่กับ novalidate:
- Zod — การตรวจสอบสคีมาที่ออกแบบมาเพื่อ TypeScript เป็นหลัก
- Yup — การตรวจสอบสคีมาของออบเจ็กต์
- Valibot — ไลบรารีสคีมาขนาดเล็ก
- React Hook Form — การจัดการสถานะแบบฟอร์มและการตรวจสอบสำหรับ React
การทดสอบการตรวจสอบความถูกต้องแบบกำหนดเอง
วิธีทดสอบการตรวจสอบความถูกต้องของแบบฟอร์มแบบกำหนดเอง:
- ทดสอบการส่งแบบฟอร์มที่ว่างเปล่า (ช่องที่จำเป็นต้องกรอก)
- ทดสอบรูปแบบที่ไม่ถูกต้อง (อีเมลผิดรูปแบบ รูปแบบหมายเลขโทรศัพท์ไม่ถูกต้อง)
- ทดสอบกรณีขอบ (มีแต่ช่องว่าง อักขระ Unicode และข้อความที่ยาวมาก)
- ทดสอบด้วยโปรแกรมอ่านหน้าจอเพื่อยืนยันว่ามีการประกาศข้อผิดพลาด
- ทดสอบการนำทางด้วยแป้นพิมพ์ระหว่างช่องหลังแสดงข้อผิดพลาด
ตรวจสอบความเข้าใจ
formnovalidate บนปุ่มทำหน้าที่อะไร
สรุป: novalidate
สาระสำคัญของ novalidate:
novalidateบนแบบฟอร์ม — ปิดการตรวจสอบทั้งหมดของเบราว์เซอร์formnovalidateบนปุ่ม — ปิดการตรวจสอบเฉพาะการส่งแบบฟอร์มนั้น- ใช้การตรวจสอบแบบกำหนดเองเพื่อควบคุมประสบการณ์ผู้ใช้และรองรับกฎที่ซับซ้อน
- ตรวจสอบที่ฝั่งเซิร์ฟเวอร์เสมอ เพราะการตรวจสอบฝั่งไคลเอนต์สามารถถูกหลีกเลี่ยงได้
- ประกาศข้อผิดพลาดให้เข้าถึงได้ด้วย
role="alert"และaria-invalid
คำถามที่พบบ่อย
บทเรียน “แอตทริบิวต์ novalidate” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “แอตทริบิวต์ novalidate” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส HTML Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส HTML Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “แอตทริบิวต์ novalidate”
ปิดการตรวจสอบของเบราว์เซอร์เมื่อจัดการการตรวจสอบด้วยตนเอง คุณปฏิบัติ HTML Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน HTML Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน HTML Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “แอตทริบิวต์ novalidate” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน HTML Academy นี้ได้ไหม
ได้ บทเรียน HTML Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- required pattern min max และ maxlength
- แอตทริบิวต์ novalidate
- พื้นฐาน Constraint Validation API
- ข้อแลกเปลี่ยนระหว่างการตรวจสอบด้วย HTML5 และ JavaScript