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

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

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">&times;</span></button>')
                                                    ->render();
            }

            return $return;
        }
        return '';
    }
?>

Na straně klienta si musíš nějak ošetřit ten výpis toho snippetu.