formulář js validace ajax
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- ondrej256
- Člen | 187
Zdravím,
mám formulář s jedním vstupním políčkem. Když ho odesílám NEajaxově tak js validace funguje, pokud odesílám formulář ajaxově tak js validace nefunguje.
public function createComponentForm()
{
$form = new Form();
$form->getElementPrototype()->class[] = 'ajax';// kdyz tento radek smazu a neodesila se to ajaxove tak js validace funguje
$form->addText('number')
->setAttribute('placeholder', 'Počet')
->addCondition(FORM::FILLED)
->addRule(FORM::INTEGER, 'Počet musi byt cislo');
$form->onSuccess[] = callback($this, 'formSubmitted');
$form->addSubmit('submit', 'submit');
return $form;
}
Formulář si vykresluju ručně, ale to s tím asi nesouvisí.
Je normální, že u ajaxového odesílání se js validace neprovede?
Tak ona nefunguje ani validace na straně serveru. jinak vše funguje jak má.
Editoval ondrej256 (11. 3. 2015 20:47)
- Freema
- Člen | 18
Ahoj nwm co přesně myslíš ale já řeším validaci formuláře při ajax requestu asi takhle:
<?php
public function createComponentForm() {
$form = new Form();
$form->getElementPrototype()->class[] = 'ajax'; // kdyz tento radek smazu a neodesila se to ajaxove tak js validace funguje
$form->addText('number')
->setAttribute('placeholder', 'Počet')
->addCondition(FORM::FILLED)
->addRule(FORM::INTEGER, 'Počet musi byt cislo');
if($this->isAjax()) {
$form->onError[] = $this->formMessageErrorResponse;
}
$form->onSuccess[] = $this->formSubmitted;
$form->addSubmit('submit', 'submit');
return $form;
}
/**
* Message box pro chybné odpovědi ze serveru.
* @callback
* @param BaseForm $form
*/
public function formMessageErrorResponse(BaseForm $form) {
$snippet = $this->getInfoBox($form->getErrors());
$this->sendResponse(new JsonResponse(array(
'errors' => $form->getErrors(),
'snippet' => $snippet,
'isValid' => FALSE,
)));
}
/**
* @param strint | array $message
* @param string $type
* @return string | array
*/
public function getInfoBox($message, $type = "danger") {
if(is_array($message)) {
$return = array();
foreach ($message as $value) {
$return[] = $el = Html::el("div") ->setClass("alert alert-".$type)
->setRole("alert")
->setText($value)
->add('<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>')
->render();
}
return $return;
}
return '';
}
?>
Na straně klienta si musíš nějak ošetřit ten výpis toho snippetu.