textarea pridanie maxlength
- uestla
- Backer | 799
Já se taky díval do API a zjistil, že to jde :-)
Dokonce se pro tuto informaci nemusí chodit tak „daleko“ – https://doc.nette.org/cs/forms#…
Editoval uestla (21. 6. 2011 22:24)
- 22
- Člen | 1478
HTML tag <textarea> žádný atribut maxlength nemá, takže nelze něco takového ani čekat v Nette formuláři. Takže opravdu je možné to ošetřit jen po odeslání formuláře, ale neřešil bych to flashMessage, ale přes $form->addError() a víc user-friendly by byl určitě javascript, který počítá znaky a oznamí problém uživateli ještě před odesláním formu.
edit: anebo jak říká uestla přes addRule()
Editoval 22 (21. 6. 2011 22:31)
- mkoubik
- Člen | 728
Validace je jedna věc, ale ten user-friendly javascript (který zobrazuje počet zbývajících znaků, případně červeně orámuje textareu při překročení limitu) by tam určitě měl být. Nic nenaštve víc, než když na tebe po odeslání vyskočí nějaká js validace (ideálně alert) a ty nevíš ani o kolik znaků jsi to přetáhl a musíš celý text několikrát přepisovat (#uxfail).
- reskator
- Člen | 18
Triviální otázka – jak se dá např. script uvedený v odkazu od „uestla“ aplikovat na textarea, který mám v nette formuláři. Řekněme, že v šabloně mám např. toto:
<div id="odeslat-zpravu">
{form odpovedForm}
<?php $form->render('begin') ?>
<?php $form->render('errors') ?>
<?php echo $form['odpoved']->control ?>
<div class="button"><?php echo $form['save']->control ?></div>
<?php $form->render('end') ?>
{/form odpovedForm}
</div>
Formulářový prvek ‚odpoved‘ je pochopitelně textarea. Ve formu klasicky:
<?php
...
$this->addTextArea('odpoved', '')
->addRule(Form::FILLED, 'Nelze poslat prázdnou zprávu');
...
?>
Editoval reskator (26. 3. 2012 15:03)
- uestla
- Backer | 799
Skript se automaticky navěsí na všechny elementy
<textarea />
, které mají atribut
maxlength
.
Čili stačí v definici formuláře
$this->addTextArea('odpoved', '')
->setRequired('Nelze poslat prázdnou zprávu')
->addRule(Form::MAX_LENGTH, 'Zpráva nesmí přesáhnout %d znaků.', 255);