فرمها و کنترلهای ورودی در HTML
بهنام نوبخت · ۱۴۰۵/۶/۲۸
یک صفحه وب علاوه بر نمایش اطلاعات، باید بتواند با کاربر نیز تعامل داشته باشد. بسیاری از فعالیتهای روزمره در وب، مانند ثبتنام، ورود به حساب کاربری، جستجو، ارسال پیام، ثبت سفارش و دریافت اطلاعات، به ورود یا انتخاب داده توسط کاربر نیاز دارند. HTML برای ایجاد چنین بخشهایی مجموعهای از عناصر و کنترلهای فرم را در اختیار ما قرار میدهد.
تا اینجا یاد گرفتیم چگونه اطلاعات را در یک صفحه وب نمایش دهیم.
اما یک صفحه وب فقط برای نمایش اطلاعات نیست.
در بسیاری از سایتها لازم است کاربر اطلاعاتی را وارد کند. برای مثال:
ثبتنام در سایت
ورود به حساب کاربری
جستجوی یک محصول
ارسال پیام
ثبت سفارش
وارد کردن شماره تلفن
انتخاب یک گزینه
آپلود فایل
ارسال نظر
برای ساخت چنین بخشهایی در HTML از Form یا فرم استفاده میکنیم.
در این مقاله با فرمها و مهمترین کنترلهای ورودی HTML آشنا میشویم.
فرم چیست؟
فرم بخشی از یک صفحه وب است که به کاربر اجازه میدهد اطلاعاتی را وارد یا انتخاب کند.
یک فرم ساده میتواند به شکل زیر باشد:
<form>
<input type="text">
<button>ارسال</button>
</form>در این مثال:
<form>محدوده فرم را مشخص میکند.<input>یک کادر ورود اطلاعات ایجاد میکند.<button>یک دکمه ایجاد میکند.
تگ <form>
برای ایجاد فرم از <form> استفاده میکنیم.
<form>
...
</form>تمام کنترلهایی که مربوط به آن فرم هستند معمولاً داخل این تگ قرار میگیرند.
مثلاً:
<form>
<input type="text">
<input type="email">
<button>ثبت</button>
</form>تگ <input>
یکی از مهمترین عناصر فرم، <input> است.
input برای دریافت انواع مختلف اطلاعات از کاربر استفاده میشود.
مثلاً:
<input type="text">یک کادر متنی ایجاد میکند.
نوع input با ویژگی type مشخص میشود.
مثلاً:
<input type="text">یا:
<input type="email">یا:
<input type="password">ورودی متنی — Text
اگر بخواهیم یک متن معمولی از کاربر دریافت کنیم، از:
<input type="text">استفاده میکنیم.
مثلاً:
<form>
<input type="text">
</form>کاربر میتواند داخل این کادر متنی وارد کند.
برای مثال:
نام خود را وارد کنیدویژگی placeholder
گاهی میخواهیم قبل از اینکه کاربر چیزی وارد کند، یک متن راهنما داخل کادر نمایش داده شود.
برای این کار از placeholder استفاده میکنیم.
<input type="text" placeholder="نام خود را وارد کنید">placeholder فقط یک راهنما است و مقدار واقعی ورودی کاربر محسوب نمیشود.
مثلاً:
<input
type="text"
placeholder="مثلاً علی احمدی">ویژگی name
یکی از ویژگیهای مهم فرمها name است.
مثلاً:
<input type="text" name="firstName">نام فیلد به سیستم کمک میکند مشخص کند اطلاعات واردشده مربوط به کدام فیلد است.
مثلاً:
<input type="text" name="username">
<input type="email" name="email">در اینجا دو فیلد با نامهای متفاوت داریم.
در بخشهای بعدی دوره، هنگام کار با فرمها و ارسال اطلاعات، اهمیت name بیشتر مشخص خواهد شد.
ویژگی value
ویژگی value مقدار اولیه یک ورودی را مشخص میکند.
مثلاً:
<input type="text" value="علی">در این حالت، کادر از ابتدا شامل عبارت «علی» است.
تفاوت آن با placeholder مهم است:
<input type="text" placeholder="نام خود را وارد کنید">متن placeholder یک راهنما است.
اما:
<input type="text" value="علی">مقدار واقعی اولیه فیلد است.
ورودی رمز عبور — Password
برای دریافت رمز عبور از:
<input type="password">
استفاده میکنیم.
مثال:
<input
type="password"
name="password"
placeholder="رمز عبور">متنی که کاربر وارد میکند معمولاً به صورت مخفی نمایش داده میشود.
ورودی ایمیل — Email
برای دریافت آدرس ایمیل:
<input type="email">مثال:
<input
type="email"
name="email"
placeholder="ایمیل خود را وارد کنید">مرورگر میتواند هنگام ارسال فرم، بررسیهای اولیهای درباره ساختار ایمیل انجام دهد.
ورودی شماره — Number
اگر بخواهیم یک مقدار عددی دریافت کنیم، میتوانیم از:
<input type="number">استفاده کنیم.
مثلاً:
<input
type="number"
name="age"
placeholder="سن">میتوان محدودیتهایی نیز تعیین کرد.
مثلاً:
<input
type="number"
min="1"
max="100">در این مثال مقدار ورودی میتواند بین ۱ تا ۱۰۰ باشد.
ورودی شماره تلفن — Tel
برای دریافت شماره تلفن میتوان از:
<input type="tel">استفاده کرد.
مثال:
<input
type="tel"
name="phone"
placeholder="شماره تلفن">توجه کنید که tel الزاماً شماره تلفن را از نظر معتبر بودن بررسی نمیکند؛ بلکه مشخص میکند این ورودی برای شماره تلفن است.
ورودی تاریخ — Date
برای دریافت تاریخ میتوان از:
<input type="date">استفاده کرد.
مثال:
<input type="date" name="birthDate">مرورگر میتواند کنترل مناسب انتخاب تاریخ را در اختیار کاربر قرار دهد.
Checkbox
گاهی کاربر باید بتواند یک یا چند گزینه را انتخاب کند.
برای این کار از:
<input type="checkbox">استفاده میکنیم.
مثال:
<label>
<input type="checkbox">
مطالعه قوانین سایت را قبول دارم
</label>در این حالت کاربر میتواند گزینه را فعال یا غیرفعال کند.
چند Checkbox
میتوان چند گزینه داشت:
<p>مهارتهای شما:</p>
<label>
<input type="checkbox" name="skills" value="html">
HTML
</label>
<label>
<input type="checkbox" name="skills" value="css">
CSS
</label>
<label>
<input type="checkbox" name="skills" value="javascript">
JavaScript
</label>در این حالت کاربر میتواند چند مورد را همزمان انتخاب کند.
Radio Button
گاهی کاربر باید فقط یکی از چند گزینه را انتخاب کند.
برای این کار از:
<input type="radio">استفاده میکنیم.
مثال:
<p>جنسیت:</p>
<label>
<input type="radio" name="gender" value="male">
مرد
</label>
<label>
<input type="radio" name="gender" value="female">
زن
</label>نکته مهم این است که گزینههای یک گروه Radio باید name یکسان داشته باشند.
مثلاً:
<input type="radio" name="gender" value="male">
<input type="radio" name="gender" value="female">به دلیل داشتن name یکسان، کاربر معمولاً فقط یکی از این دو گزینه را انتخاب میکند.
تفاوت Checkbox و Radio
تفاوت آنها را به خاطر بسپارید:
Checkbox
برای انتخاب چند گزینه مناسب است.
☑ HTML
☑ CSS
☐ JavaScriptRadio
برای انتخاب یک گزینه از بین چند گزینه مناسب است.
◉ مرد
○ زنLabel چیست؟
یکی از تگهای مهم فرم <label> است.
Label برای مشخص کردن عنوان یا توضیح یک کنترل ورودی استفاده میشود.
مثلاً:
<label>
نام:
<input type="text">
</label>یا:
<label for="username">نام کاربری</label>
<input type="text" id="username">در روش دوم، مقدار for در <label> با id ورودی یکسان است.
<label for="username">نام کاربری</label>
<input
type="text"
id="username"
name="username">این روش باعث میشود رابطه بین عنوان و فیلد به شکل واضحتری مشخص شود.
چرا استفاده از Label مهم است؟
استفاده از label فقط برای نمایش متن کنار input نیست.
Label باعث میشود فرم برای کاربران قابل فهمتر باشد و دسترسیپذیری بهتری داشته باشد.
بنابراین بهتر است برای فیلدهای فرم، عنوان مشخصی داشته باشیم.
به جای:
<input type="text">بهتر است بنویسیم:
<label for="name">نام</label>
<input type="text" id="name" name="name">فیلد چندخطی با <textarea>
گاهی یک خط برای دریافت اطلاعات کافی نیست.
مثلاً برای:
توضیحات
پیام
نظر کاربر
آدرس
توضیحات محصول
میتوانیم از <textarea> استفاده کنیم.
مثال:
<textarea
name="message"
placeholder="پیام خود را وارد کنید"></textarea>برخلاف <input>، textarea میتواند چند خط متن داشته باشد.
انتخاب از یک لیست با <select>
گاهی میخواهیم کاربر یک گزینه را از بین چند گزینه انتخاب کند.
برای این کار از <select> استفاده میکنیم.
مثال:
<label for="city">شهر</label>
<select id="city" name="city">
<option value="tehran">تهران</option>
<option value="shiraz">شیراز</option>
<option value="tabriz">تبریز</option>
<option value="mashhad">مشهد</option>
</select>تگ <select> لیست انتخابی را ایجاد میکند.
هر گزینه نیز با <option> مشخص میشود.
تگ <option>
هر گزینه داخل <select> با <option> نوشته میشود.
مثلاً:
<option value="html">HTML</option>متنی که کاربر میبیند:
HTMLو مقدار آن:
htmlاست.
بنابراین:
<option value="html">HTML</option>دو بخش دارد:
value→ مقداری که برای گزینه در نظر گرفته شده است.متن داخل
<option>→ چیزی که کاربر میبیند.
انتخاب پیشفرض یک Option
میتوانیم مشخص کنیم یک گزینه از ابتدا انتخاب شده باشد.
برای این کار از selected استفاده میکنیم.
<select name="city">
<option value="tehran">تهران</option>
<option value="shiraz" selected>شیراز</option>
<option value="tabriz">تبریز</option>
</select>در این مثال «شیراز» به صورت پیشفرض انتخاب شده است.
دکمه با <button>
برای ایجاد دکمه میتوانیم از <button> استفاده کنیم.
مثال:
<button>ارسال</button>در فرمها معمولاً از دکمه برای ارسال اطلاعات استفاده میشود.
مثلاً:
<form>
<input type="text" name="name">
<button type="submit">ارسال</button>
</form>نوع دکمه با type
ویژگی type مشخص میکند دکمه چه رفتاری داشته باشد.
مهمترین حالتها:
Submit
<button type="submit">ارسال</button>برای ارسال فرم.
Reset
<button type="reset">پاک کردن</button>برای بازنشانی مقادیر فرم.
Button
<button type="button">دکمه</button>یک دکمه معمولی است که به خودی خود فرم را ارسال نمیکند.
در این دوره فعلاً تمرکز اصلی ما روی submit و reset است.
ویژگی required
گاهی یک فیلد نباید خالی باشد.
برای این کار میتوانیم از required استفاده کنیم.
مثال:
<label for="username">نام کاربری</label>
<input
type="text"
id="username"
name="username"
required>اگر کاربر این فیلد را خالی بگذارد و فرم را ارسال کند، مرورگر میتواند از ارسال فرم جلوگیری کند و از کاربر بخواهد آن را تکمیل کند.
ویژگیهای minlength و maxlength
میتوانیم حداقل و حداکثر طول متن را مشخص کنیم.
مثلاً:
<input
type="text"
name="username"
minlength="3"
maxlength="20">در این مثال:
حداقل طول: ۳ کاراکتر
حداکثر طول: ۲۰ کاراکتر
است.
ویژگی min و max
برای ورودیهای عددی میتوانیم محدوده مشخص کنیم.
<input
type="number"
name="age"
min="18"
max="100">در این مثال مقدار سن باید در محدوده تعیینشده باشد.
یک فرم ثبتنام ساده
حالا چند موردی را که یاد گرفتیم در کنار هم قرار دهیم.
<form>
<label for="name">نام:</label>
<input
type="text"
id="name"
name="name"
required>
<br><br>
<label for="email">ایمیل:</label>
<input
type="email"
id="email"
name="email"
required>
<br><br>
<label for="password">رمز عبور:</label>
<input
type="password"
id="password"
name="password"
required>
<br><br>
<label for="phone">شماره تلفن:</label>
<input
type="tel"
id="phone"
name="phone">
<br><br>
<button type="submit">ثبتنام</button>
</form>این یک فرم ساده ثبتنام ایجاد میکند.
ساخت یک فرم تماس با ما
مثال دیگری ایجاد کنیم:
<form>
<label for="name">نام:</label>
<input
type="text"
id="name"
name="name"
required>
<br><br>
<label for="email">ایمیل:</label>
<input
type="email"
id="email"
name="email"
required>
<br><br>
<label for="subject">موضوع:</label>
<input
type="text"
id="subject"
name="subject">
<br><br>
<label for="message">پیام:</label>
<br>
<textarea
id="message"
name="message"
rows="5"
cols="40"
placeholder="پیام خود را بنویسید"></textarea>
<br><br>
<button type="submit">ارسال پیام</button>
</form>در این مثال از:
textemailtextareabutton
استفاده کردهایم.
فرم کاملتر
حالا یک فرم ثبتنام کاملتر ایجاد کنیم:
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<title>فرم ثبتنام</title>
</head>
<body>
<h1>ثبتنام</h1>
<form>
<div>
<label for="name">نام:</label>
<input
type="text"
id="name"
name="name"
placeholder="نام خود را وارد کنید"
required>
</div>
<br>
<div>
<label for="email">ایمیل:</label>
<input
type="email"
id="email"
name="email"
placeholder="example@email.com"
required>
</div>
<br>
<div>
<label for="password">رمز عبور:</label>
<input
type="password"
id="password"
name="password"
required>
</div>
<br>
<div>
<label for="age">سن:</label>
<input
type="number"
id="age"
name="age"
min="1"
max="120">
</div>
<br>
<div>
<label for="city">شهر:</label>
<select
id="city"
name="city">
<option value="tehran">تهران</option>
<option value="shiraz">شیراز</option>
<option value="tabriz">تبریز</option>
<option value="mashhad">مشهد</option>
</select>
</div>
<br>
<div>
<p>نوع حساب:</p>
<label>
<input
type="radio"
name="accountType"
value="personal">
شخصی
</label>
<label>
<input
type="radio"
name="accountType"
value="business">
تجاری
</label>
</div>
<br>
<div>
<label>
<input
type="checkbox"
name="terms"
required>
قوانین سایت را میپذیرم
</label>
</div>
<br>
<button type="submit">ثبتنام</button>
<button type="reset">پاک کردن</button>
</form>
</body>
</html>این مثال بسیاری از عناصر مهم فرم را در کنار یکدیگر قرار داده است.
یک نکته مهم درباره form
ممکن است در مثالهای ساده فقط بنویسیم:
<form>اما در پروژههای واقعی فرم معمولاً نیاز دارد مشخص کند اطلاعات باید کجا و با چه روشی ارسال شوند.
برای این کار ویژگیهای مهمی مانند:
action
method
وجود دارند.
مثلاً:
<form action="/register" method="post">در اینجا:
actionمقصد ارسال فرم را مشخص میکند.methodروش ارسال اطلاعات را مشخص میکند.
در این مرحله لازم نیست وارد جزئیات ارسال اطلاعات شویم؛ چون برای درک کامل آن، باید ابتدا با مفاهیم بیشتری آشنا شویم.
بعداً هنگام کار با بخشهای سمت سرور، این موضوع اهمیت بیشتری پیدا خواهد کرد.
تفاوت Form و Input
این دو را با هم اشتباه نگیرید.
<form>
ظرف یا محدوده کلی فرم است.
<input>
یکی از کنترلهایی است که برای دریافت اطلاعات استفاده میشود.
مثلاً:
<form>
<input type="text">
<input type="email">
<button type="submit">
ارسال
</button>
</form>در اینجا یک فرم داریم که شامل دو input و یک button است.
فهرست مهمترین کنترلهایی که یاد گرفتیم
عنصر | کاربرد |
|---|---|
| ایجاد فرم |
| ورود متن |
| ورود رمز عبور |
| ورود ایمیل |
| ورود عدد |
| ورود شماره تلفن |
| انتخاب تاریخ |
| انتخاب چند گزینه |
| انتخاب یک گزینه |
| ورود متن چندخطی |
| انتخاب از لیست |
| یک گزینه از لیست |
| ایجاد دکمه |
| عنوان و توضیح فیلد |
اشتباهات رایج
۱. استفاده نکردن از Label
این روش:
<input type="text">
برای یک فرم واقعی اطلاعات کمی درباره کاربرد فیلد به کاربر میدهد.
بهتر است:
<label for="name">نام</label>
<input type="text" id="name" name="name">
۲. استفاده اشتباه از Radio
اگر Radioها name یکسان نداشته باشند، ممکن است رفتار مورد انتظار برای انتخاب یک گزینه از یک گروه را نداشته باشند.
مثلاً:
<input type="radio" name="gender" value="male">
<input type="radio" name="gender" value="female">
درست است.
۳. استفاده از Checkbox برای انتخاب فقط یک گزینه
اگر کاربر باید فقط یک گزینه را انتخاب کند، معمولاً Radio انتخاب مناسبتری است.
۴. تصور اینکه placeholder جای Label را میگیرد
این دو یکی نیستند.
مثلاً:
<input
type="text"
placeholder="نام خود را وارد کنید">
در بسیاری از فرمها همچنان بهتر است یک label مشخص داشته باشیم.
۵. تصور اینکه HTML تمام اعتبارسنجی را انجام میدهد
ویژگیهایی مثل:
required
min
max
minlength
maxlength
برای اعتبارسنجی اولیه مرورگر بسیار مفید هستند.
اما در یک برنامه واقعی نباید فقط به اعتبارسنجی سمت مرورگر وابسته باشیم.
اعتبارسنجی سمت سرور موضوعی جداگانه است که در مباحث بعدی و سمت Backend بیشتر با آن آشنا میشویم.
تمرین عملی
تمرین ۱ — فرم ورود
فرمی ایجاد کنید که شامل موارد زیر باشد:
نام کاربری
رمز عبور
دکمه ورود
برای نام کاربری از text و برای رمز عبور از password استفاده کنید.
تمرین ۲ — فرم ثبتنام
یک فرم ثبتنام ایجاد کنید که شامل:
نام
نام خانوادگی
ایمیل
شماره تلفن
رمز عبور
تکرار رمز عبور
شهر
دکمه ثبتنام
باشد.
تمرین ۳ — فرم تماس
فرمی ایجاد کنید که شامل:
نام
ایمیل
موضوع
متن پیام
دکمه ارسال
باشد.
برای متن پیام از <textarea> استفاده کنید.
تمرین ۴ — Checkbox
فرمی ایجاد کنید که کاربر بتواند چند مهارت را انتخاب کند:
HTML
CSS
JavaScript
C#
ASP.NET Core
برای هر مورد یک Checkbox ایجاد کنید.
تمرین ۵ — Radio
از کاربر بخواهید نوع حساب خود را انتخاب کند:
شخصی
شرکتی
در این تمرین باید فقط امکان انتخاب یکی از گزینهها وجود داشته باشد.
چالش مقاله
یک صفحه ثبتنام برای یک دوره آموزشی طراحی کنید.
صفحه باید شامل:
اطلاعات شخصی
نام
نام خانوادگی
ایمیل
شماره تلفن
اطلاعات دوره
یک select ایجاد کنید که شامل دورههای زیر باشد:
طراحی وب
برنامهنویسی C#
JavaScript
ASP.NET Core
سطح مهارت
با Radio:
مبتدی
متوسط
پیشرفته
مهارتها
با Checkbox:
HTML
CSS
JavaScript
C#
توضیحات
با <textarea> یک فیلد برای توضیحات ایجاد کنید.
قوانین
یک Checkbox برای پذیرش قوانین قرار دهید و آن را required کنید.
دکمهها
دو دکمه داشته باشید:
ثبتنام
پاک کردن
سعی کنید تمام این موارد را فقط با HTML پیادهسازی کنید و فعلاً نگران زیبایی فرم نباشید.
جمعبندی
فرمها یکی از مهمترین بخشهای HTML هستند، زیرا امکان دریافت اطلاعات از کاربر را فراهم میکنند.
در این مقاله یاد گرفتیم:
<form>برای ایجاد فرم است.<input>برای دریافت انواع مختلف اطلاعات استفاده میشود.textبرای متن معمولی است.passwordبرای رمز عبور است.emailبرای ایمیل است.numberبرای اعداد است.telبرای شماره تلفن است.dateبرای تاریخ است.checkboxبرای انتخاب چند گزینه است.radioبرای انتخاب یک گزینه از بین چند گزینه است.<textarea>برای متن چندخطی است.<select>و<option>برای لیستهای انتخابی هستند.<label>برای مشخص کردن عنوان فیلدها استفاده میشود.<button>برای ایجاد دکمه است.requiredبرای اجباری کردن یک فیلد کاربرد دارد.placeholderمتن راهنما را نمایش میدهد.nameنام یک فیلد را مشخص میکند.valueمقدار یک ورودی یا گزینه را مشخص میکند.
تا اینجا تقریباً مهمترین عناصر پایهای HTML را یاد گرفتهایم و میتوانیم صفحات نسبتاً کاملی ایجاد کنیم.
در مقاله بعدی سراغ یکی از مفاهیم مهم و بسیار پرکاربرد HTML میرویم و با مفهوم Attributeها به شکل کاملتر آشنا میشویم و یاد میگیریم چگونه با ویژگیهایی مثل id، class، title، style و سایر Attributeها رفتار و اطلاعات عناصر HTML را کنترل کنیم.
نظرات
هنوز نظری ثبت نشده است.