textarea pridanie maxlength

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ricco24
Člen | 141
+
0
-

Dá sa do addTexarea pridať pravidlo na maximálnu dĺžku ? nejako ako pri addText ?

Mohol by som to orezávať po odoslaní ale chcem aby sa to prejavilo hned pri písaní textu ako pri addText.

Editoval ricco24 (21. 6. 2011 13:49)

ricco24
Člen | 141
+
0
-

Takže som to vyriešil cez PHP overenie dĺžky textu a pri presiahnutí vypíšem do flashMessage chybovú správu. Ako som pozeral API tak nastavenie maximálnej dĺžky pri textarea nieje možné.

uestla
Backer | 799
+
0
-

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
+
0
-

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)

uestla
Backer | 799
+
0
-

Chichi, Google Chrome atribut maxlength podporuje identickým způsobem jako klasický input (ostatní prohlížeče nevím), navíc javascriptová validace (při použití netteForms.js) funguje taky, takže nevím, o čem je tu řeč :-)

Problém neexistuje.

22
Člen | 1478
+
0
-

je pravda, že pro HTML5 už je maxlength přidán, takže vlastně neexistuje :-)

mkoubik
Člen | 728
+
0
-

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).

uestla
Backer | 799
+
0
-

:-)

OT, ale nešť: http://jsbin.com/atuhe4/6/edit

Editoval uestla (22. 6. 2011 14:25)

reskator
Člen | 18
+
0
-

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
+
0
-

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);
reskator
Člen | 18
+
0
-

Super, díky moc!