في وحدة سابقة، تعلمت كيفية استخدام العنصر <form>
.
في هذه الوحدة، ستتعرّف على آلية عمل النموذج والحالات التي تستدعي استخدامه.
هل يجب استخدام عنصر <form>
؟
لا تحتاج دائمًا إلى وضع عناصر التحكّم في النماذج في عنصر <form>
.
على سبيل المثال، يمكنك تقديم عنصر <select>
للمستخدمين لاختيار فئة منتج.
لست بحاجة إلى عنصر <form>
هنا، لأنّك لا تخزِّن البيانات أو تعالجها في الخلفية.
ومع ذلك، في معظم الحالات عند تخزين البيانات أو معالجتها من المستخدِمين،
يجب استخدام العنصر <form>
.
كما ستتعرّف عليه في هذه الوحدة، يوفّر لك استخدام <form>
الكثير من الوظائف المضمّنة من المتصفّحات التي كان عليك إنشاؤها بنفسك.
تتضمّن أجهزة <form>
أيضًا العديد من ميزات تسهيل الاستخدام المضمّنة تلقائيًا.
إذا كنت تريد تجنُّب إعادة تحميل الصفحة عندما يُرسل أحد المستخدِمين نموذجًا،
سيظل بإمكانك استخدام العنصر <form>
، ولكن عليك تحسينه باستخدام
JavaScript.
كيف تعمل <form>
؟
لقد عرفت أنّ <form>
هي أفضل طريقة لمعالجة بيانات المستخدمين.
قد تتساءل الآن، كيف يعمل النموذج؟
<form>
هو حاوية لعناصر التحكّم في النماذج التفاعلية.
<form method="post">
<label for="name">Name</label>
<input type="text" name="name" id="name">
<button formaction="/name">Save</button>
</form>
كيف يتم إرسال النماذج؟
عند إرسال <form>
، يتحقّق المتصفّح من سمات <form>
. يتم إرسال البيانات كطلب GET
أو POST
وفقًا لسمة method
. في حال عدم توفّر سمة method
، يتم إرسال طلب
GET
إلى عنوان URL للصفحة الحالية.
كيف يمكنك الوصول إلى بيانات النموذج ومعالجتها؟
يمكن معالجة البيانات المرسَلة باستخدام JavaScript في الواجهة الأمامية باستخدام طلب GET
،
أو باستخدام رمز في الخلفية باستخدام طلب GET
أو POST
.
اطّلِع على مزيد من المعلومات عن
أنواع الطلبات ونقل بيانات النماذج.
عند إرسال النموذج، يُرسِل المتصفّح طلبًا إلى عنوان URL الذي يمثّل قيمة السمة action
.
بالإضافة إلى ذلك، يتحقّق المتصفّح مما إذا كان الزر إرسال يحتوي على سمة formaction
.
في هذه الحالة، يتم استخدام عنوان URL المحدّد هناك.
بالإضافة إلى ذلك، يبحث المتصفّح عن سمات إضافية في عنصر <form>
،
على سبيل المثال، لتحديد ما إذا كان يجب التحقّق من صحة النموذج (novalidate
) أو استخدام ميزة "الإكمال التلقائي" (autocomplete="off"
) أو ترميز البيانات (accept-charset
).
جرِّب إنشاء نموذج يمكن للمستخدمين من خلاله إرسال اللون المفضّل لديهم.
يجب إرسال البيانات كطلب POST
، ويجب أن يكون عنوان URL الذي ستتم معالجة البيانات فيه هو /color
.
أحد الحلول المحتملة هو استخدام هذا النموذج:
<form method="post" action="/color"> <label for="color">What is your favorite color?</label> <input type="text" name="color" id="color"> <button>Save</button> </form>
التأكّد من أنّه يمكن للمستخدمين إرسال النموذج
هناك طريقتان لإرسال نموذج.
يمكنك النقر على الزر إرسال أو الضغط على Enter
أثناء استخدام أيّ عنصر تحكّم في النموذج.
يمكنك إضافة زر إرسال بعدة طرق.
أحد الخيارات هو استخدام عنصر <button>
داخل النموذج.
طالما أنّك لا تستخدم type="button"
، يعمل الزرّ كزر إرسال.
يمكنك أيضًا استخدام <input type="submit" value="Submit">
.
الخيار الثالث هو استخدام <input type="image" alt="Submit" src="submit.png">
،
لإنشاء زر إرسال مرئي.
ومع ذلك، بما أنّه يمكنك الآن إنشاء أزرار رسومية باستخدام CSS، لا يُنصح باستخدام type="image"
.
السماح للمستخدمين بإرسال الملفات
استخدِم <input type="file">
لتفعيل إمكانية تحميل المستخدمين للملفات وإرسالها إذا لزم الأمر.
<label for="file">Choose file to upload</label>
<input type="file" id="file" name="file" multiple>
أولاً، أضِف عنصر <input>
مع type="file"
إلى النموذج.
أضِف السمة multiple
إذا كان يجب أن يتمكّن المستخدمون من تحميل ملفات متعددة.
هناك تغيير آخر مطلوب لضمان تمكّن المستخدمين من تحميل الملفات، وهو ضبط السمة enctype
في النموذج.
تكون القيمة التلقائية application/x-www-form-urlencoded
.
<form method="post" enctype="multipart/form-data">
…
</form>
للتأكّد من إمكانية إرسال الملفات، غيِّر هذا الإعداد إلى multipart/form-data
.
بدون هذا الترميز، لا يمكن إرسال الملفات باستخدام طلب POST
.
التحقّق من فهمك
اختبِر معلوماتك حول عنصر النموذج
ما هي القيمة المطلوبة لـ enctype
لإرسال الملفات؟
multipart/form-data
multipart/form-files
form-data
form-files
هل من الممكن إرسال بيانات المستخدمين بدون <form>
كيف يمكنك إرسال <form>
؟
<button>
.Enter
.<input type="image">
.