السمة novalidate
تعطيل التحقق في المتصفح عند تولّيكم معالجته بأنفسكم
السمة novalidate درس مجاني في HTML Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في HTML Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة HTML Academy 4 دروس في المجموع.
قيود التحقق من صحة المتصفح
يحتوي التحقق المدمج في HTML5 على بعض القيود:
- تختلف رسائل الخطأ باختلاف المتصفح، ويصعب تنسيقها
- يُجرى التحقق عند الإرسال فقط، وليس عند فقدان التركيز أو الإدخال
- لا يمكن تطبيق قواعد العمل المعقدة، مثل تطابق كلمتي المرور أو تفرد اسم المستخدم
عندما تحتاجون إلى تحكم كامل، عطّلوا التحقق المدمج باستخدام novalidate.
إضافة novalidate إلى النموذج
تؤدي إضافة 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 عبر تعديل الطلبات
- ينبغي أن تحاكي عملية التحقق المخصصة باستخدام JavaScript، مع novalidate، قواعد الخادم
مكتبات التحقق
مكتبات JavaScript الشائعة للتحقق التي تعمل مع novalidate:
- Zod — مكتبة للتحقق من المخططات، وتركّز أولًا على TypeScript
- Yup — للتحقق من مخططات الكائنات
- Valibot — مكتبة خفيفة للمخططات
- React Hook Form — لإدارة حالة النموذج والتحقق منه في React
اختبار التحقق المخصص
كيفية اختبار التحقق المخصص للنماذج:
- اختبروا الإرسال الفارغ، أي الحقول المطلوبة
- اختبروا التنسيق غير الصالح، مثل البريد الإلكتروني الخاطئ أو نمط الهاتف غير الصحيح
- اختبروا الحالات الحدية، مثل المسافات فقط أو Unicode أو السلاسل النصية الطويلة جدًا
- اختبروا باستخدام قارئ الشاشة للتحقق من الإعلان عن الأخطاء
- اختبروا التنقل باستخدام لوحة المفاتيح بين الحقول بعد عرض الخطأ
تحقق سريع
ماذا يفعل formnovalidate عند إضافته إلى زر؟
مراجعة: novalidate
أساسيات novalidate:
novalidateفي النموذج — يعطّل جميع عمليات التحقق التي يجريها المتصفحformnovalidateفي الزر — يعطّل التحقق لعملية الإرسال هذه فقط- استخدموا التحقق المخصص للتحكم في تجربة المستخدم وتطبيق القواعد المعقدة
- أجروا التحقق دائمًا على جانب الخادم — إذ يمكن تجاوز التحقق من جانب العميل
- أعلنوا عن الأخطاء بطريقة سهلة الوصول باستخدام
role="alert"وaria-invalid
الأسئلة الشائعة
هل درس «السمة novalidate» مجاني؟
نعم — نص درس «السمة novalidate» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة HTML Academy، انتقل إلى CoddyKit PRO. تتضمن دورة HTML Academy 4 دروس في المجموع.
ماذا ستتعلم في «السمة novalidate»؟
تعطيل التحقق في المتصفح عند تولّيكم معالجته بأنفسكم تتمرن على HTML Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ HTML Academy؟
لا تُشترط خبرة سابقة. HTML Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «السمة novalidate»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس HTML Academy هذا؟
نعم. كل درس في HTML Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- required وpattern وmin وmax وmaxlength
- السمة novalidate
- أساسيات Constraint Validation API
- مفاضلات التحقق باستخدام HTML5 وJavaScript