Validace tří selectů (datum narození) → jedna hláška
- joe
- Člen | 313
Ahoj,
je možné nějak nastavit validaci tak, aby mi to při nevybrání hodnoty z jednoho ze tří selectů (den, měsíc a rok) vypsalo, že musím zvolit kompletní datum narození?
Zároveň mám v select boxech jako první hodnotu ' – ' nebo něco, tzn, že bych chtěl použít skipFirst()
Příklad:
budí mít vybráno v pořadí den, měsíc a rok:
- – – – … chybová hláška → ‚Vyplňte datum‘
- 12 – – … chybová hláška → ‚Vyplňte datum‘
- 12 05 – … chybová hláška → ‚Vyplňte datum‘
Jde to? Díky za každou pomoc.
- Jur4
- Člen | 51
Tak to je validace na každém selectu zvlášť, jen ze stejnou hláškou. Takže nějak takhle?
$message = 'Vyplňte kompletní datum narození.';
$form->addSelect('day', 'Den', $days)
->addRule(Form::FILLED, $message)
->skipFirst(' - ');
$form->addSelect('month', 'Měsíc', $months)
->addRule(Form::FILLED, $message)
->skipFirst(' - ');
$form->addSelect('year', 'Rok', $years)
->addRule(Form::FILLED, $message)
->skipFirst(' - ');
- Jur4
- Člen | 51
Jo to mě nedocvaklo. A co tohle?
$message = 'Vyplňte kompletní datum narození.';
$form->addSelect('day', 'Den', $days)
->skipFirst(' - ')
->addRule(Form::FILLED, $message);
$form->addSelect('month', 'Měsíc', $months)
->skipFirst(' - ')
->addConditionOn($form['day'], Form::FILLED)
->addRule(Form::FILLED, $message);
$form->addSelect('year', 'Rok', $years)
->skipFirst(' - ')
->addConditionOn($form['month'], Form::FILLED)
->addRule(Form::FILLED, $message);
Takhle by ty selecty měly být povinné „postupně“. Nejprve se bude validovat den. Jakmile bude vyplněný den pak bude povinný měsíc a až vyplníš měsíc tak pak bude povinný rok.
edit: ale neřeší to variantu, že někdo vybere nejdříve rok, ale ne den (nejsem si jistý, jestli to takhle půjde vůbec udělat)
Editoval Jur4 (12. 5. 2011 22:17)
- Vojtěch Dobeš
- Gold Partner | 1316
Tuším, že bude třeba využít podmínky (doufám, že to funguje, netestoval jsem to, ale nějak takto přes podmínky to určitě půjde):
Edit: Jur4 mě předběhnul :) A podle mě nevadí, že to neřeší variantu, kdy uživatel nejprve vyplní rok – to je v pořádku, formulář mu ohlásí, že chybí vyplněný den.
Nebylo by ale celkově lepší místo tohoto použít třeba DatePicker od Honzy Tvrdíka?
Editoval vojtech.dobes (12. 5. 2011 22:26)
- joe
- Člen | 313
@**Jur4**:
Něco takového, ale ještě to má mouchy. Pokud vyberu pouze den a odešlu,
dostanu jednu hlášku. Pokud vyberu pouze rok, dostanu zase jednu hlášku.
Pokud ale vyberu jenom měsíc, dostanu hlášky dvě – jednu definovanou
u dne a druhou u roka.
Nějak to nemůžu logicky odstranit tak, aby to fungovalo pro všechny způsoby
zadání a vždy jsem dostal jenom jednu.
@**vojtech.dobes**:
O podobných komponentách vím a nepoužívám je. Nic proti nim, ale přijdou mi úplně zbytečné. A na takovou věc nepotřebuji do stránky nasazovat jQuery a jQueryUI. Raději mám výběr data přes tři selecty, kde uživatel nemusí zbytečně listovat kalendářem, co při neopatrném kliku vedle zmizí.
- Jur4
- Člen | 51
Teď si nejsem úplně jistý jestli se dají podmínky řetězit, ale pokud ano, tak by to mělo jít asi takhle.
$form->addSelect('year', 'Rok', $years)
->skipFirst(' - ')
->addConditionOn($form['day'], Form::FILLED)
->addConditionOn($form['month'], Form::FILLED)
->addRule(Form::FILLED, $message);
Editoval Jur4 (13. 5. 2011 0:09)
- bojovyletoun
- Člen | 667
Ahoj, co kdybych si chtěl přidat nějakou speciální validaci? Jako například víc selectboxů, z nichž třeba:
- např ze 6 selectboxů aby byly 2 dvojice stejné values a zbylé 2 boxy jiné values . A podobné scifi podmínky.
Jak byste to řešili? Mě napadlo využít připojit validační proceduru do eventu onValidate[] a tam v případě chyby zavolat addError.