LOW-level formulář – radilost – nefunguje required

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
n.u.r.v.
Člen | 485
+
+1
-

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">&times;</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
+
0
-

hmm, googlím, ale zatím nenacházím řešení – jak zrušit atribut novalidate?

Kor3ik
Člen | 5
+
0
-

Zdravím, měl bych dotaz, jestli si vyřešil daní problém. Dost by mi to pomohlo, jelikož řeším podobnou věc.

n.u.r.v.
Člen | 485
+
+1
-

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">&times;</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}
Kor3ik
Člen | 5
+
0
-

Díky moc ;).