این متن هنوز کامل نیست و در حال بروزرسانی است. نسخهی نهایی پس از تکمیل در دسترس قرار خواهد گرفت.
فرمها و عناصر ورودی
در توسعه وب مدرن فرمها (Forms) به عنوان یکی از مهمترین ابزارهای تعامل بین کاربر و سیستم، نقش محوری در جمعآوری داده، مدیریت ورودی و ایجاد تجربه کاربری مؤثر دارند. این فصل به بررسی جامع و تخصصی ساختار کلی فرمها، انواع عناصر ورودی، اعتبارسنجی داخلی، و بهبود دسترسیپذیری در HTML5 میپردازد.
هدف این فصل، ایجاد فرمهای معتبر، هوشمندانه، دسترسیپذیر و قابل تنظیم برای تمام دستگاهها است که همچون یک سازه معنایی، خوانایی، عملکرد و امنیت را تضمین میکند.
9.1 ساختار کلی تگ فرم: بنیان تعامل کاربری
9.1.1 <form>: عنصر اصلی فرم
پایهای برای جمعآوری و ارسال دادههای کاربر.
| action |
آدرسی که دادهها به آن ارسال میشوند (URL) |
| method |
روش ارسال دادهها با ویژگی method تعیین میشود و معمولاً یکی از مقادیر GET (پیشفرض) یا POST است. |
| enctype |
نوع رمزگذاری دادههای ارسالی با ویژگی enctype مشخص میشود و میتواند application/x-www-form-urlencoded، multipart/form-data یا text/plain باشد. |
| autocomplete |
ویژگی autocomplete تعیین میکند که آیا مرورگر مجاز است فیلدهای فرم را بهصورت خودکار با اطلاعات قبلی پر کند یا نه؛ مقدار آن on یا off است. |
| novalidate |
برای غیرفعالسازی اعتبارسنجی پیشفرض مرورگر میتوان از ویژگی novalidate استفاده کرد تا دادهها بدون بررسی ارسال شوند. |
<form
action="/submit"
method="POST"
enctype="multipart/form-data"
autocomplete="on"
novalidate
>
<!-- محتوای فرم -->
</form>
- method="POST" برای دادههای حساس (مانند رمز عبور) توصیه میشود.
- enctype="multipart/form-data" برای فایلهای آپلود ضروری است.
- autocomplete="off" در فرمهای حساس (مثل ورود به سیستم) میتواند امنیت را افزایش دهد.
9.2 عناصر ورودی متداول: ورودیهای پایهای
9.2.1 <input type="...">: انواع پایهای
| text |
متن آزاد و معمولی |
برای دریافت نام، آدرس یا هر نوع داده متنی پایه |
| email |
ایمیل معتبر |
برای ورود آدرس ایمیل با اعتبارسنجی خودکار مرورگر |
| url |
آدرس اینترنتی |
برای وارد کردن لینک وبسایت بهصورت معتبر |
| tel |
شماره تلفن |
برای دریافت شماره تماس بدون فرمت مشخص |
| number |
مقدار عددی |
برای اعداد مانند سن، قیمت یا مقدار قابل شمارش |
| date |
انتخاب تاریخ |
نمایش تقویم برای انتخاب یک روز مشخص |
| datetime-local |
تاریخ و زمان |
انتخاب تاریخ و ساعت بدون ناحیه زمانی (local) |
| time |
ساعت |
برای انتخاب مقدار زمان مانند ساعت و دقیقه |
| month |
ماه |
برای انتخاب یک ماه و سال (بدون روز) |
| week |
هفته |
برای انتخاب هفته خاصی از یک سال |
| color |
انتخاب رنگ |
نمایش انتخابگر رنگ برای تنظیمات گرافیکی یا UI |
| range |
نوار لغزنده |
برای مقادیر پیوسته مانند میزان صدا یا روشنایی |
| password |
رمز مخفی |
ورودی مخفی برای رمز عبور یا اطلاعات محرمانه |
| search |
ورودی جستجو |
برای فیلدهای جستجو با ویژگیهای خاص UX |
| file |
انتخاب فایل |
برای آپلود فایل از سیستم کاربر |
<input type="email" name="email" placeholder="example@domain.com" required>
<input type="date" name="birthday">
<input type="file" name="avatar" accept="image/*">
استفاده از type="email" و type="url" به مرورگر کمک میکند تا اعتبارسنجی اولیه انجام دهد.
required برای فیلدهای ضروری استفاده میشود.
9.3 کنترلهای ورودی پیشرفته: مدیریت دادههای پیچیده
9.3.1 <textarea>: متن چندخطی
- برای ورودیهای طولانی (مثلاً نظرات، توضیحات).
- ویژگیهای کلیدی: rows - cols - placeholder - maxlength
<textarea
name="comment"
rows="5"
cols="60"
placeholder="نظر خود را بنویسید..."
maxlength="500"
></textarea>
9.3.2 <select> و <option>: لیست انتخابی
برای انتخاب یک مقدار از بین گزینهها.
<select name="country" required>
<option value="">— انتخاب کنید —</option>
<option value="ir">ایران</option>
<option value="us">آمریکا</option>
<option value="fr">فرانسه</option>
</select>
از required و aria-label برای توضیح لیست استفاده کنید.
9.3.3 <optgroup>: گروهبندی گزینهها
برای گروهبندی گزینهها (مثلاً ایالتهای یک کشور).
<select name="state">
<optgroup label="ایران">
<option value="tehran">تهران</option>
<option value="shiraz">شیراز</option>
</optgroup>
<optgroup label="آمریکا">
<option value="ny">نیویورک</option>
</optgroup>
</select>
9.3.4 <datalist>: لیست پیشنهادی (Autocomplete)
لیست گزینههای پیشنهادی برای <input>./t>
<input list="browsers" name="browser">
<datalist id="browsers">
<option value="Chrome">
<option value="Firefox">
<option value="Safari">
<option value="Edge">
</datalist>
این تگ بدون id و list کار نمیکند. استفاده از آن به جای autocomplete در فرمهای ساده، مفید است.
9.3.5 <button>: دکمه فرم
- برای ارسال یا ریست فرم.
- ویژگیهای کلیدی: type="submit" - type="reset" - type="button".
<button type="submit">ارسال</button>
<button type="reset">ریست</button>
<button type="button" onclick="alert('Hello')">نوشته</button>
9.3.6 <output>: نمایش نتیجه محاسبه
برای نمایش خروجی یک فرم (مثلاً مجموع، میانگین).
<label for="amount">مبلغ:</label>
<input type="number" id="amount" oninput="updateOutput()">
<output name="result" for="amount">0</output>
<script>
function updateOutput() {
const amount = document.getElementById("amount").value;
document.querySelector("output").textContent = amount * 1.1;
}
</script>
9.3.7 <meter> و <progress>: نمایش وضعیت
| <meter> |
وضعیت کمّی (مثلاً سطح باتری، پردازش) |
| <progress> |
فرآیند پیشرفت (مثلاً آپلود، بارگذاری) |
<meter min="0" max="100" value="75">75%</meter>
<progress value="50" max="100">50%</progress>
- <meter> برای مقادیر ثابت یا نسبی است.
- <progress> برای فرآیندهای در حال انجام.
9.4 اعتبارسنجی فرم در HTML5: امنیت و کیفیت داده
9.4.1 ویژگیهای اعتبارسنجی داخلی
| required |
فیلد ضروری |
| pattern |
الگوی متنی (regex) |
| max - min |
حداقل و حداکثر عدد |
| maxlength - minlength |
طول کاراکتر |
| step |
گام عددی مثلا (0.5) |
| disabled - readonly |
فقط خواندنی یا غیرفعال |
<input
type="text"
name="username"
pattern="[a-zA-Z]{3,}"
minlength="3"
maxlength="20"
required
title="نام کاربری باید حداقل ۳ حرف باشد."
>
title به کاربر در صورت خطای اعتبارسنجی راهنمایی میکند.
pattern با regex کار میکند اما باید به دقت تست شود.
9.4.2 Constraint Validation API: اعتبارسنجی پیشرفته با JavaScript
این API به توسعهدهندگان اجازه میدهد تا اعتبارسنجی را به صورت برنامهنویسی انجام دهند.
<script>
const form = document.querySelector("form");
const input = document.querySelector("input");
form.addEventListener("submit", function (e) {
if (!input.validity.valid) {
e.preventDefault();
alert("لطفاً فیلد را به درستی پر کنید.");
}
});
</script>
- validity.valid آیا فیلد معتبر است؟
- validity.valueMissing آیا فیلد خالی است؟
- validity.patternMismatch آیا الگوی مطابق است؟
- setCustomValidity() تعیین پیام خطای شخصی
<script>input.setCustomValidity("این فیلد الزامی است.");</script>
اعتبارسنجی داخلی HTML5 فقط برای اولین سطح است. اعتبارسنجی پایانی باید با JavaScript و سرور انجام شود.
9.5 بهبود دسترسیپذیری فرمها: از ساختار به اعتماد
9.5.1 <label>: ارجاع به فیلد
- هر فیلد باید دارای <label> باشد.
- استفاده از for="id" برای ارتباط با id فیلد.
<label for="email">ایمیل:</label>
<input type="email" id="email" name="email">
Screen Readers از for و id برای خواندن فیلد استفاده میکنند.
اگر فیلد بدون label باشد از aria-label استفاده کنید.
9.5.2 ویژگیهای ARIA برای فرمها
| aria-label |
توضیح فیلد بدون نمایش |
| aria-labelledby |
ارجاع به یک یا چند عنوان |
| aria-describedby |
توضیحات جانبی |
| aria-invalid |
مشخص کردن خطای فرم |
| aria-required |
مشخص کردن فیلد ضروری |
<input
type="email"
aria-label="ایمیل کاربر"
aria-invalid="true"
aria-describedby="error-email"
>
<p id="error-email">ایمیل وارد شده معتبر نیست.</p>
استفاده از aria-invalid و aria-describedby به ابزارهای دسترسی کمک میکند تا خطاهای فرم را به درستی اعلام کنند.
یک فرم موفق فقط با ظاهر زیبا نیست بلکه با ساختار معنایی منظم، اعتبارسنجی هوشمندانه، و دسترسیپذیری بالا ساخته میشود. این فصل پایهای برای نوشتن محتوای تعاملی معتبر، دسترسیپذیر و متناسب با استانداردهای جهانی است.
بعدی
قبلی