LOW-level formulář – radilost – nefunguje required
- n.u.r.v.
- Člen | 485
Ahoj, používám Low-level formuláře (dle tohoto návodu: https://phpfashion.com/…-v-nette-2-1 ) pro vykreslení radilostů. Vše výborně funguje až na jednu věc – za boha nemohu zprovoznit required="" u radio.
Formulář se odešle i když nic neoznačím…
takto vykresluji formulář v latte:
{form runTestForm}
{if $form->hasErrors()}
<div n:foreach="$form->errors as $flash" class="alert alert-danger">
<button type="button" class="close" data-dismiss="alert">×</button>
{!$flash}
</div>
{/if}
{foreach $question as $item}
<p>{$item['QUESTION']}</p>
{for $j=1; $j<11; $j++}
{if $item['VAR'.$j] != ''}
<p><input type="radio" name="var{$iterator->counter}" value="{$j}" required="" /><label>{$item['VAR'.$j]}</label></p>
{else}
{var $j = 11}
{/if}
{/for}
{/foreach}
{/form}
Takže např. vznikne tento html kod:
<form action="/test-run" method="post" class="form-horizontal" id="frm-runTestForm">
<p>xxx?</p>
<p><input type="radio" name="var1" value="1" required=""><label>ano</label></p>
<p><input type="radio" name="var1" value="2" required=""><label>ne</label></p>
<p>yy?</p>
<p><input type="radio" name="var2" value="1" required=""><label>ano</label></p>
<p><input type="radio" name="var2" value="2" required=""><label>ne</label></p>
<p>zzz?</p>
<p><input type="radio" name="var3" value="1" required=""><label>ano</label></p>
<p><input type="radio" name="var3" value="2" required=""><label>ne</label></p>
<input type="submit" name="send" class="btn btn-next" id="frm-runTestForm-send" value="Pokračovat">
<div><input type="hidden" name="_token_" id="frm-runTestForm-_token_" value="0n5r99fzh8nZzZDKeykmH7nYHBOnjX2qbiA0w="><input type="hidden" name="type" id="frm-runTestForm-type" value="A"><input type="hidden" name="do" value="runTestForm-submit"><!--[if IE]><input type=IEbug disabled style="display:none"><![endif]--></div>
</form>
A takto je v presenteru vytvořen formulář:
protected function createComponentRunTestForm() {
$form = new Form();
$form->getElementPrototype()->addAttributes(array('class' => 'form-horizontal'));
$form->addProtection('Platnost formuláře vypršela! Zkuste to prosím znovu.');
$form->addHidden('type');
$form->addSubmit('send', 'Pokračovat')
->setAttribute('class', 'btn btn-next');
$form->onSuccess[] = $this->runTestSucceeded;
return $form;
}
Nevíte co je špatně? Díky
edit: teď jsem zjistil, že i když smažu všechny prvky a dám tam text input, tak u něj taky nefunguje required – nemůže to dělat třeba nějaký nette javascript?
edit2 – už to vidím – dělá to novalidate ve <form> – jdu najít jak se to ruší
Editoval n.u.r.v. (11. 11. 2014 11:28)
- n.u.r.v.
- Člen | 485
Ahoj, už je to dlouho co jsem to řešil, takže už nevím co pomohlo, ale mám to takto a funguje mi to:
formulář v presenteru:
protected function createComponentSurveyForm() {
$form = new Form();
$form->getElementPrototype()->addAttributes(array('class' => 'form-horizontal', 'novalidate' => NULL));
$form->addProtection('Platnost formuláře vypršela! Zkuste to prosím znovu.');
foreach ($this->varList as $key => $items) {
$form->addRadioList('var'.$key, NULL, $items)
->setRequired(".................")
->getSeparatorPrototype()->setName(NULL);
}
$form->addSubmit('send', 'Pokračovat')
->setAttribute('class', 'btn btn-next');
$form->onSuccess[] = $this->surveySucceeded;
return $form;
}
latte:
{form surveyForm}
<div id="errorMessages"></div>
{if $form->hasErrors()}
<div n:foreach="$form->errors as $flash" class="alert alert-danger">
<button type="button" class="close" data-dismiss="alert">×</button>
{!$flash}
</div>
{/if}
.....
.....
<div class="var-list">
{var $radio = 'var'.$key}
{foreach $form[$radio]->items as $varKey => $varLabel}
<input n:name="$radio:$varKey"><label n:name="$radio:$varKey">{$varLabel}</label>
{/foreach}
</div>
....
....
{input send}
{/form}