فهرست مستندات پروژه
فرمهای بومی و اعتبارسنجی
مقدار قابل پردازش را با FormData بخوانید و انتخاب الزامی و بازنشانی را مدیریت کنید.
ارسال تاریخ انتخابشده
این عنصر به فرم متصل میشود. برای ارسال value قابل پردازش، name را روی خود انتخابگر بگذارید. برچسبی که به id آن اشاره کند، ورودی داخلی را نامگذاری میکند.
<form id="booking-form">
<label for="arrival">تاریخ ورود</label>
<intl-datepicker id="arrival" name="arrival" locale="en-GB"
value="2026-03-15" min="2026-03-01" max="2026-03-31"
required></intl-datepicker>
<button type="submit">خواندن رزرو</button>
<button type="reset">بازنشانی</button>
</form>
<output id="booking-result"></output>
import 'intl-datepicker';
const form = document.querySelector('#booking-form');
const output = document.querySelector('#booking-result');
form.addEventListener('submit', (event) => {
event.preventDefault();
if (!form.reportValidity()) return;
output.textContent = new FormData(form).get('arrival') ?? '';
});
ارسال انتخاب اولیه، 2026-03-15 را نشان میدهد و درخواست شبکهای نمیفرستد. ارسال تعاملی بومی پیش از رویداد submit اعتبارسنجی میکند؛ بررسی صریح در نمونه، نیاز به اعتبارسنجی در خواندن داده با کد را هم روشن میکند. خود new FormData(form) هرگز اعتبارسنجی نمیکند. هنگام پردازش داده در سرور، دوباره آن را بررسی کنید.
مقدار خالی هیچ مدخلی به فرم اضافه نمیکند، حتی مدخلی با رشته خالی. کنترل disabled، از جمله در fieldset غیرفعال، ارسال نمیشود. بدون name هم فیلد نامداری وجود ندارد. این رفتار به پشتیبانی مرورگر از عنصر سفارشی متصل به فرم وابسته است؛ کتابخانه ورودی مخفی جایگزین ندارد.
اعتبارسنجی
برای بررسی، picker.checkValidity() و برای درخواست نمایش پیام مرورگر، picker.reportValidity() را فراخوانی کنید. validity، validationMessage، willValidate و form وضعیت ElementInternals را در اختیار میگذارند.
بررسیها به این ترتیب انجام میشوند:
| وضعیت | پرچم | کلید متن |
|---|---|---|
| متن تایپشده نامعتبر یا تاریخ غیرمجاز | badInput | invalidDate، dateUnavailable یا متن خطای بازه |
| مقدار خالی الزامی | valueMissing | pleaseSelectDate |
| بازه الزامی بدون پایان | valueMissing | rangeIncomplete |
| زودتر از حداقل یا دیرتر از حداکثر | rangeUnderflow یا rangeOverflow | dateTooEarly یا dateTooLate |
| روز غیرفعال یا بازه غیرمجاز | customError | dateUnavailable یا rangeUnavailable |
| شب کمتر یا بیشتر از حد | tooShort یا tooLong | rangeTooShort یا rangeTooLong |
مقدار تنظیمشده با کد حتی در صورت نامعتبر بودن حفظ میشود. ابتدا حد تاریخ، سپس دسترسپذیری روزها و بعد طول بازه بررسی میشود. قواعد روزانه، تکتک روزهای هفته، ماه یا سال را اعتبارسنجی نمیکنند. max-dates محدودیت اختصاص مقدار و تعامل است و پرچم اعتبارسنجی ندارد.
بازه الزامی بدون پایان همچنان با تاریخ شروع در FormData حاضر است. اعتبارسنجی آن را رد میکند، نه استخراج داده. بدون required، شروع در انتظار میتواند معتبر باشد؛ برنامه شما باید درباره پذیرفتن بازه ناقص تصمیم بگیرد. قواعد بازه را ببینید.
بازنشانی و وضعیت غیرفعال
form.reset() مقدار attribute فعلی value را برمیگرداند و اگر attribute وجود نداشته باشد، انتخاب را خالی میکند. تغییر .value، setValue() یا انتخاب کاربر، پیشفرض بازنشانی را عوض نمیکند؛ تغییر attribute آن را عوض میکند. بازنشانی، خطای تایپ را پاک میکند و intl-change نمیفرستد.
disabled باز شدن را مسدود و ورودی داخلی را غیرفعال میکند. fieldset غیرفعال از طریق callback بومی فرم مدیریت میشود. readonly تایپ در ورودی داخلی و باز شدن عادی از آن را مسدود میکند، اما تضمینی برای تغییرناپذیری از طریق کد یا ورودی سفارشی نیست. در پیادهسازی فعلی، حالت درونصفحهای و ورودی خارجی محدودیتهایی در رعایت readonly دارند. رفع اشکال را ببینید.
ورودی سفارشی
ورودی داخلی، کاملترین اتصال صفحهکلید، نامگذاری و نمایش خطا را دارد. میتوانید آن را با ورودی slot جایگزین کنید:
<intl-datepicker name="arrival" value="2026-03-15">
<input slot="input" type="text" aria-label="تاریخ ورود" readonly>
</intl-datepicker>
به ورودی slot همان نام فرم را ندهید؛ آن ورودی متن محلی نشان میدهد، در حالی که میزبان مقدار ISO را میفرستد. برچسب و وضعیت disabled و readonly آن را خودتان تنظیم کنید. کامپوننت همه ویژگیهای ARIA ورودی داخلی را به ورودی سفارشی منتقل نمیکند. با allow-input، ورودی slot میتواند تاریخ تایپشده را ثبت کند؛ اگر تایپ میخواهید، readonly خود ورودی را بردارید.
یک ورودی موجود هم میتواند با for انتخابگر را باز کند:
<label for="arrival-display">تاریخ ورود</label>
<input id="arrival-display" type="text" readonly>
<intl-datepicker for="arrival-display" name="arrival"
locale="en-GB" value="2026-03-15"></intl-datepicker>
اینجا for شناسه ورودی خارجی است و ورودی داخلی انتخابگر پنهان میشود. پس از تغییر انتخاب، ورودی خارجی متن محلی را نشان میدهد. این اتصال برای باز کردن و نمایش است و واسط کامل تایپ دوطرفه یا دسترسپذیری نیست؛ allow-input پردازشگرهای تایپ و صفحهکلید داخلی را به آن وصل نمیکند. متن موجود ورودی ممکن است هنگام اتصال تجزیه شود، اما مقدار اولیه میزبان همیشه در نخستین اتصال به ورودی منتقل نمیشود. در صورت نیاز، نمایش اولیه را صریح تنظیم کنید:
import 'intl-datepicker';
const picker = document.querySelector('intl-datepicker');
document.querySelector('#arrival-display').value = picker.displayValue;
name را روی انتخابگر نگه دارید و رفتار تکمیلی ورودی خارجی را در برنامه پیاده کنید. برای کاربرد معمول فرم، نمونه اول مناسبتر است.