تعلّم التحقق من النماذج باستخدام JavaScript عبر مشروع عملي للمبتدئين

دقائق القراءة: 7

مقدمة إلى التحقق من النماذج باستخدام JavaScript

يُعد Form Validation من أهم المهارات الأساسية في تطوير واجهات الويب، لأنه يضمن إدخال بيانات صحيحة قبل إرسالها، ويحسن تجربة المستخدم، ويقلل من الأخطاء داخل التطبيقات. في هذا الدليل العملي، سنبني نموذج تسجيل بسيط باستخدام HTML وCSS وJavaScript، مع إضافة الأيقونات والصور وتهيئة التصميم ليكون Responsive على مختلف الأجهزة.

واجهة مشروع التحقق من النماذج باستخدام JavaScript للمبتدئين

الهدف من هذا المشروع ليس فقط التحقق من الحقول الفارغة، بل أيضاً فهم كيفية تنظيم المشروع بشكل عملي يصلح لعرضه ضمن معرض أعمالك التقني.

تصميم سطح المكتب لمشروع JavaScript Form Validationعرض توضيحي لآلية عمل نموذج التحقق من المدخلات في JavaScript

إعداد المشروع بشكل صحيح

قبل البدء في كتابة الأكواد، أنشئ بيئة عمل بسيطة ومنظمة. ستحتاج إلى مجلد مشروع يحتوي على الملفات الأساسية التالية:

  • index.html
  • style.css
  • main.js

بعد ذلك، اربط الملفات داخل صفحة HTML، ثم نزّل الصور المطلوبة للمشروع إن أردت تطبيق التصميم كما هو. كذلك ستحتاج إلى مكتبة Font Awesome لإظهار الأيقونات داخل الحقول.

خطوات إعداد مشروع التحقق من النماذج باستخدام HTML CSS JavaScript

أضف رابط Font Awesome داخل وسم الرأس في ملف HTML:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" crossorigin="anonymous" />

إضافة مكتبة Font Awesome إلى مشروع JavaScript

خطة العمل داخل المشروع

سنقسم تنفيذ المشروع إلى مراحل واضحة حتى يسهل فهم كل جزء على حدة:

  • كتابة بنية HTML
  • تنسيق الواجهة باستخدام CSS
  • بناء منطق التحقق عبر JavaScript
  • إضافة أزرار التسجيل عبر الشبكات الاجتماعية
  • إضافة الصور والعناصر البصرية
  • استخدام Media Queries لجعل التصميم متجاوباً

محاور شرح مشروع التحقق من النماذج باستخدام JavaScript

كتابة هيكل HTML للنموذج

إنشاء الحاوية الرئيسية والنموذج

ابدأ بإنشاء عنصر يحمل الفئة .container، وداخله نموذج يحمل المعرّف form:

<div class="container">
  <form id="form"></form>
</div>

ثم أضف أربعة عناصر div داخل النموذج، أحدها للعنوان وثلاثة للحقول:

<form id="form">
  <div class="title">Get Started</div>
  <div></div>
  <div></div>
  <div></div>
</form>

إضافة حقول الإدخال الأساسية

سننشئ ثلاثة حقول رئيسية: Username وEmail وPassword. كما سنضيف منطقة مخصصة لرسائل الخطأ عبر الفئة .error، ليتم تحديثها لاحقاً باستخدام JavaScript.

حقل اسم المستخدم:

<!-- User Name input -->
<div>
  <label for="username">User Name</label>
  <i class="fas fa-user"></i>
  <input type="text" name="username" id="username" placeholder="Joy Shaheb" />
  <i class="fas fa-exclamation-circle failure-icon"></i>
  <i class="far fa-check-circle success-icon"></i>
  <div class="error"></div>
</div>

حقل البريد الإلكتروني:

<!-- Email input -->
<div>
  <label for="email">Email</label>
  <i class="far fa-envelope"></i>
  <input type="email" name="email" id="email" placeholder="abc@gmail.com" />
  <i class="fas fa-exclamation-circle failure-icon"></i>
  <i class="far fa-check-circle success-icon"></i>
  <div class="error"></div>
</div>

حقل كلمة المرور:

<!-- Password input -->
<div>
  <label for="password">Password</label>
  <i class="fas fa-lock"></i>
  <input type="password" name="password" id="password" placeholder="Password here" />
  <i class="fas fa-exclamation-circle failure-icon"></i>
  <i class="far fa-check-circle success-icon"></i>
  <div class="error"></div>
</div>

إضافة زر الإرسال

في نهاية النموذج، أضف زر الإرسال بالشكل التالي:

<form>
  <!-- other codes are here -->
  <button id="btn" type="submit">Submit</button>
</form>

النتيجة الأولية لبنية HTML الخاصة بنموذج التسجيل

تنسيق النموذج باستخدام CSS

إعادة ضبط الأنماط الافتراضية

من الجيد دائماً البدء بإزالة الهوامش والإعدادات الافتراضية التي تفرضها المتصفحات:

/**
 * ! changing default styles of brower
 **/
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: sans-serif;
}

تنسيق النموذج والعنوان

بعد ذلك، نسّق النموذج نفسه ليظهر بشكل عمودي مع ظل خفيف ومساحة داخلية مناسبة:

/**
 * ! style rules for form section
 **/
form {
  display: flex;
  flex-direction: column;
  justify-content: center;
  max-width: 400px;
  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
  padding: 50px;
}
.title {
  font-size: 25px;
  font-weight: bold;
  margin-bottom: 20px;
}

تنسيق أولي للنموذج والعنوان باستخدام CSS

تنسيق الحقول والعناصر المحيطة بها

أضف تنسيقاً بسيطاً إلى label والحقول النصية:

label {
  display: block;
  margin-bottom: 5px;
}
form div input {
  width: 100%;
  height: 40px;
  border-radius: 8px;
  outline: none;
  border: 2px solid #c4c4c4;
  padding: 0 30px;
  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
}
form div {
  position: relative;
  margin-bottom: 15px;
}

input:focus {
  border: 2px solid #f2796e;
}

تنسيق حقول الإدخال داخل نموذج JavaScript Form Validation

تنسيق الأيقونات ورسائل الخطأ

لجعل الأيقونات تظهر داخل الحقول بشكل صحيح، استخدم التموضع المطلق:

/**
 * ! style rules for form icons
 **/
form div i {
  position: absolute;
  padding: 10px;
}

إضافة أيقونات Font Awesome إلى حقول النموذج

ثم أضف ألوان النجاح والخطأ ورسائل التنبيه:

.failure-icon,
.error {
  color: red;
}

.success-icon {
  color: green;
}

.error {
  font-size: 14.5px;
  margin-top: 5px;
}

وبما أن أيقونتي النجاح والفشل تتداخلان في البداية، أخفهما مؤقتاً إلى أن يتحكم بهما JavaScript:

.success-icon,
.failure-icon {
  right: 0;
  opacity: 0;
}

رسائل الخطأ وأيقونات التحقق داخل النموذج

تنسيق زر الإرسال

/* Style rules for submit btn */
button {
  margin-top: 15px;
  width: 100%;
  height: 45px;
  background-color: #f2796e;
  border: 2px solid #f2796e;
  border-radius: 8px;
  color: #fff;
  font-size: 20px;
  cursor: pointer;
  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
  transition: all 0.1s ease;
}
button:hover {
  opacity: 0.8;
}

مرحلة استراحة بعد الانتهاء من تنسيق النموذج

إضافة منطق التحقق باستخدام JavaScript

تحديد العناصر المستهدفة

أول خطوة هي الوصول إلى عناصر الصفحة بسهولة. لإنجاز ذلك بصورة أنظف، يمكن إنشاء دالتين مساعدتين:

let id = (id) => document.getElementById(id);
let classes = (classes) => document.getElementsByClassName(classes);

بعدها خزّن عناصر النموذج داخل متغيرات:

let username = id("username"),
    email = id("email"),
    password = id("password"),
    form = id("form"),
    errorMsg = classes("error"),
    successIcon = classes("success-icon"),
    failureIcon = classes("failure-icon");

منع الإرسال الافتراضي للنموذج

حتى نختبر التحقق أولاً قبل إرسال البيانات، أضف مستمع الحدث التالي:

form.addEventListener("submit", (e) => {
  e.preventDefault();
});

إنشاء دالة التحقق الأساسية

سننشئ دالة باسم engine تستقبل ثلاثة معاملات:

  • id: الحقل الذي نريد التحقق منه
  • serial: رقم العنصر المطابق داخل مصفوفات الرسائل والأيقونات
  • message: رسالة الخطأ التي ستظهر عند وجود مشكلة
let engine = (id, serial, message) => {}

التحقق الأساسي سيكون كالتالي:

let engine = (id, serial, message) => {
  if (id.value.trim() === "") {
  } else {
  }
}

تُستخدم الدالة trim() لإزالة الفراغات الزائدة من بداية النص ونهايته، حتى لا يمرر المستخدم قيمة تبدو ممتلئة وهي في الحقيقة فارغة.

شرح استخدام trim في JavaScript لإزالة المسافات الزائدة

إظهار رسائل الخطأ وحالات النجاح

الآن أضف منطق الرسائل وتغيير الحدود والأيقونات:

let engine = (id, serial, message) => {
  if (id.value.trim() === "") {
    errorMsg[serial].innerHTML = message;
    id.style.border = "2px solid red";

    // icons
    failureIcon[serial].style.opacity = "1";
    successIcon[serial].style.opacity = "0";
  } else {
    errorMsg[serial].innerHTML = "";
    id.style.border = "2px solid green";

    // icons
    failureIcon[serial].style.opacity = "0";
    successIcon[serial].style.opacity = "1";
  }
}

تفعيل التحقق عند الضغط على زر الإرسال

بعد إنشاء الدالة، استدعها داخل حدث submit لكل حقل:

form.addEventListener("submit", (e) => {
  e.preventDefault();

  engine(username, 0, "Username cannot be blank");
  engine(email, 1, "Email cannot be blank");
  engine(password, 2, "Password cannot be blank");
});

بهذا الشكل، سيتحقق النموذج من كل حقل على حدة، ويعرض رسالة مناسبة عند ترك أي مدخل فارغ.

نتيجة تطبيق التحقق من الحقول الفارغة باستخدام JavaScript

إضافة أزرار التسجيل عبر الشبكات الاجتماعية

لجعل واجهة النموذج أكثر احترافية، يمكن إضافة خيارات تسجيل بديلة عبر Google وFacebook.

أضف البنية التالية داخل النموذج:

<form id="form">
  <div class="social">
    <div class="title">Get Started</div>
    <div class="question">
      Already Have an Account? <br />
      <span>Sign In</span>
    </div>
    <div class="btn"></div>
    <div class="or">Or</div>
  </div>
  <!-- other codes are here-->
</form>

ثم أضف زري الشبكات الاجتماعية داخل العنصر .btn:

<div class="btn">
  <div class="btn-1">
    <img src="https://img.icons8.com/color/30/000000/google-logo.png" />
    Sign Up
  </div>
  <div class="btn-2">
    <img src="https://img.icons8.com/ios-filled/30/ffffff/facebook-new.png" />
    Sign Up
  </div>
</div>

إضافة أزرار التسجيل عبر Google وFacebook داخل النموذج

نسّق هذه الأزرار كالتالي:

/**
 * ! style rules for social section
 **/
.btn {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  gap: 15px;
}
.btn-1,
.btn-2 {
  padding: 10px 5px;
  width: 100%;
  display: flex;
  gap: 15px;
  justify-content: center;
  align-items: center;
  border: 2px solid #c4c4c4;
  border-radius: 8px;
  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
  cursor: pointer;
}
.btn-2 {
  background-color: #4f70b5;
  color: white;
}
.or {
  text-align: center;
}

.question {
  font-size: 15px;
}

span {
  color: #f2796e;
  cursor: pointer;
}

تنسيق أزرار الشبكات الاجتماعية داخل نموذج التسجيل

إضافة الصور والعناصر البصرية

الواجهة الجذابة تساعد على تحسين الانطباع الأول وتجعل المشروع أقرب إلى التطبيقات الحقيقية. أضف القسم البصري التالي بجوار النموذج:

<div class="container">
  <div class="content">
    <div class="logo">
      <img src="https://svgshare.com/i/_go.svg" alt="" />
    </div>
    <div class="image"></div>
    <div class="text">
      Start for free & get <br /> attractive offers today!
    </div>
  </div>

  <form id="form">
    <!--other codes are here -->
  </form>
</div>

إضافة قسم جانبي بصري إلى مشروع نموذج التسجيل

ثم غيّر اتجاه العناصر داخل الحاوية ليصبح أفقياً:

.container {
  display: flex;
  flex-direction: row;
}
/**
 * ! style rules for content section
 **/
.content {
  display: flex;
  flex-direction: column;
  justify-content: space-around;
  background-color: #f2796e;
  width: 55%;
  min-height: 100vh;
  padding: 10px 20px;
}

form {
  width: 45%;
  max-width: none;
}

تقسيم الصفحة بين المحتوى البصري والنموذج باستخدام CSS Flexbox

أضف الرسم التوضيحي الرئيسي عبر CSS:

.image {
  background-image: url("https://svgshare.com/i/_gZ.svg");
  background-repeat: no-repeat;
  background-size: contain;
  background-position: center;
  /* border: 2px solid black; */
  height: 65%;
}
.text {
  text-align: center;
  color: white;
  font-size: 18px;
}

form {
  width: 45%;
  max-width: none;
}

الشكل النهائي للقسم البصري بجوار نموذج التسجيل

جعل التصميم متجاوباً عبر Media Queries

أي واجهة حديثة يجب أن تعمل جيداً على الهواتف والأجهزة اللوحية، لذلك سنضيف Media Queries لضبط التخطيط حسب عرض الشاشة.

للشاشات التي تقل عن 900px

@media (max-width: 900px) {
  .container {
    flex-direction: column;
  }

  form,
  .content {
    width: 100%;
  }

  .btn {
    flex-direction: column;
  }

  .image {
    height: 70vh;
  }
}

للشاشات التي تقل عن 425px

@media (max-width: 425px) {
  form {
    padding: 20px;
  }
}

النتيجة النهائية المتجاوبة لمشروع JavaScript Form Validation

لماذا هذا المشروع مهم للمبتدئين؟

هذا المشروع يعلّمك أكثر من مجرد التحقق من القيم الفارغة. فهو يساعدك على فهم عدد من المفاهيم العملية المهمة، مثل:

  • التعامل مع عناصر DOM في JavaScript
  • إنشاء دوال قابلة لإعادة الاستخدام
  • ربط الواجهة البصرية بسلوك تفاعلي واضح
  • تحسين تجربة المستخدم من خلال الرسائل الفورية
  • تصميم واجهة تسجيل حديثة ومتجاوبة

وإذا رغبت في تطوير المشروع لاحقاً، يمكنك توسيعه عبر إضافة تحقق من صحة البريد الإلكتروني بصيغة Regex، أو قياس قوة كلمة المرور، أو ربط النموذج بواجهة خلفية Backend.

الخلاصة التقنية

يمثل هذا المشروع نقطة انطلاق ممتازة لفهم JavaScript Form Validation بصورة عملية. من الناحية التقنية، أفضل ما فيه هو الجمع بين بساطة الهيكل وإمكانية تطويره لاحقاً إلى نظام تحقق أكثر تقدماً. إذا أتقنت هذا النموذج، فسيصبح من السهل عليك بناء نماذج تسجيل وتواصل واشتراك أكثر احترافية داخل مشاريع الويب الحديثة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *