Combobox
یک <select> معمولی با data-combobox جستوجوی هنگام تایپ میگیرد. خود select مخفی میماند و منبع حقیقت است، پس ارسال فرم، FormData و change مثل قبل کار میکنند. ماژول combobox لازم است.
<form data-validate ui="stack" style="max-inline-size:22rem">
<label ui="field"><span>شهر</span>
<select name="city" data-combobox required>
<option value="">انتخاب کنید…</option>
<optgroup label="مرکز">
<option value="thr">تهران</option>
<option value="qom">قم</option>
<option value="isf">اصفهان</option>
</optgroup>
<optgroup label="جنوب">
<option value="shz" data-keywords="shiraz">شیراز</option>
<option value="bnd">بندرعباس</option>
<option value="ahv" disabled>اهواز (بهزودی)</option>
</optgroup>
<optgroup label="شمال و شرق">
<option value="rsh">رشت</option>
<option value="mhd" data-keywords="mashhad">مشهد</option>
<option value="tbz">تبریز</option>
<option value="krm">کرمان</option>
</optgroup>
</select>
</label>
<button ui="primary" type="submit">ادامه</button>
</form>
با تایپ فهرست فیلتر میشود (ارقام، «ي/ی»، «ك/ک» و نیمفاصله یکی گرفته میشوند؛ «shiraz» هم با data-keywords پیدا میشود). کلیدها: ↓↑، Enter انتخاب، Esc بستن و بازگرداندن مقدار قبلی، Tab خروج. فوکوس همیشه در ورودی میماند و گزینه فعال با aria-activedescendant اعلام میشود. اگر گزینهای با مقدار خالی دارید، پاککردن متن انتخاب را پاک میکند. متنی که از فهرست انتخاب نشده باشد معتبر نیست و با Enhanced Form خطای فارسی میدهد.
فعلاً فقط انتخاب تکی.
select multiple دستنخورده میماند. برای فهرستهای بسیار بزرگ یا جستوجوی سمت سرور، گزینهها را خودتان بهروز کنید و Bana.refresh() را بزنید.