از رویداد استفاده میکنیم. رویداد زمانی رخ می دهد که یک عنصر <input> قابل ارسال، نامعتبر باشد.
ایجاد فرم های وب همیشه یک کار پیچیده بوده است. در حالی که علامتگذاری marking up خود فرم آسان است، بررسی اینکه آیا هر فیلد دارای ارزش معتبر و منسجمی است دشوارتر است، و اطلاعرسانی به کاربر در مورد مشکل ممکن است باعث سردرد شود. HTML5 مکانیسمهای جدیدی را برای فرمها معرفی کرد: نوع سیمانتیک semantic types جدیدی را برای عنصر <input> و اعتبارسنجی محدودیت constraint validation اضافه کرد تا کار بررسی محتوای فرم در سمت مشتری را آسان کند. محدودیت های معمولی و اولیه را می توان بدون نیاز به جاوا اسکریپت با تنظیم اتریبیوتهای (attributes) جدید بررسی کرد. محدودیت های پیچیده تر را می توان با استفاده از Constraint Validation API آزمایش کرد.
پس برای پاسخ به سوال بالا میتوان از نمونه کد زیر استفاده کرد.
<input type="text" ="alert('شما باید فرم را کامل پر کنید');" required>
نمونه کد کامل html:
<!DOCTYPE html> <html> <body> <form action="/action_page.php" method="get"> Name: <input type="text" ="alert('You must fill out the form!');" name="fname" required> <input type="submit" value="Submit"> </form> <p>If you click submit, without filling out the text field, an alert message will occur.</p> <p><strong>Note:</strong> The event is not supported in Safari.</p> </body> </html>
میتوانید کد بالا را در یک سربرگ جدید از نرم افزار notepad++ با فرمت html ذخیره کنید و سپس با مرورگر باز کنید. به عنوان تمرین میتوانید پیام نمایش داده شده ویرایش کنید و یک متن فارسی به جای آن بنویسید.
مطالعه بیشتر درباره Constraint validation و setCustomValidity
کمی درباره required بیاموزیم:
required
یک attribute یا صفت از نوع boolean است.در زیر یک مثال درباره فیلد input که دارای صفت required است ببینید.
یک فرم HTML دارای المان input:
<form action="/action_page.php"> Username: <input type="text" name="usrname" required> <input type="submit"> </form>
یک فرم HTML با لیست کشویی دارای اتریبیوت required:
<select required> <option value="">None</option> <option value="volvo">Volvo</option> <option value="saab">Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select>
یک فرم HTML با کادر متنی دارای اتریبیوت (صفت) required:
<form action="/action_page.php"> <textarea name="comment" required></textarea> <input type="submit"> </form>
در این لینک از W3Schools.com سه المان معرفی شده دربالا برای اتریبیوت required معرفی شدند.
اما در این لینک از MDN المانهای زیر قابل استفاده برای required معرفی شده اند:
text
, search
, url
, tel
, email
, password
, date
, month
, week
, time
, datetime-local
, number
, checkbox
, radio
, file
, &lt;input&gt;,&lt;select&gt;,&lt;textarea&gt;
text, search, url, tel, email, password, date, month, week, time, datetime-local, number, checkbox, radio, file, <input>,<select>,<textarea>
اما چرا این دو منبع با هم متفاوت هستند؟
در حقیقت تفاوتی وجود ندارد، بلکه المان input دارای انواع زیر است:
text, search, url, tel, email, password, date, month, week, time, datetime-local, number, checkbox, radio, file
پس آموختیم که سه المان کنترل فرم یعنی input, select, textarea میتوانند دارای اتریبیوت (صفت) required باشند.
:required
یک کلاس از نوع است. زمانیکه این اتریبیوت برای المانها در فرم به کار نرود به صورت پیشفرض کلاس زیر به انها نسبت داده میشود::optional
pseudo-classها کلمات کلیدی هستند که به انتخابگرها برای تعیین یک حالت خاص از عنصر انتخاب شده, اضافه می شوند.
یعنی چی اگر required برای یک المان فرم استفاده نکنیم روی optional تنظیم میشه؟ چه فایده ای داره؟
تصور کنید یک فرم HTML دارید که دارای فایل استایل با فرمت css است. در این فرم میخواهید دور کادر المانهایی که دارای required نیستند را رنگی کنید. مثل شکل زیر:
کد HTML برای ساخت فرم بالا:
<form> <div class="field"> <label for="url_input">Enter a URL:</label> <input type="url" id="url_input" /> </div> <div class="field"> <label for="email_input">Enter an email address:</label> <input type="email" id="email_input" required /> </div> </form>
کد style.css برای ساخت فرم بالا:
<form> <div class="field"> <label for="url_input">Enter a URL:</label> <input type="url" id="url_input" /> </div> <div class="field"> <label for="email_input">Enter an email address:</label> <input type="email" id="email_input" required /> </div> </form>
به یک مثال دیگر توجه کنید. تصویر زیر را ببینید و دقت کنید تا تشخیص دهید کدام المانها دارای صفت required هستند:
فایل css برای نتیجه بالا در زیر آمده است:
label { display: block; margin-top: 1em; } .req { color: red; } *:optional { background-color: palegreen; }