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

Ahoj, omlouvám se, možná je to triviální, ale trápím se několik hodin.
Mám obyč formulář, vykresluji ho automaticky šablonou v latte.

{block content}
	{control personalForm}
{/block}

Problém je, že se mi přestaly ukazovat chybové hlášky vedle políček, ale zobrazuje se jen alert javascriptu.

Co se mohlo stát?
Formulář vytvářím pomocí továrny v metodě create ve třídě personalFormFactory.php

	public function create($withOtherPayer=0)
	{
		$form=new Form;
		$form->addGroup(self::L_LEGEND);
		$form->addText('firstName', self::L_FIRST_NAME)
			->setRequired(self::L_REQURIED.  strtolower(self::L_FIRST_NAME));

		$form->addText('familyName', self::L_FAMILY_NAME)
			->setRequired(self::L_REQURIED.  strtolower(self::L_FAMILY_NAME));

		$form->addText('street', self::L_STREET)
					->setRequired(self::L_REQURIED.  strtolower(self::L_STREET))
					->addRule(Form::PATTERN,  self::E_STREET,'\D+');

		$form->addText('numberAtStreet', self::L_NUMBER_AT_STREET)
				->setRequired(self::L_REQURIED.  strtolower(self::L_NUMBER_AT_STREET))
					->addRule(Form::INTEGER,  self::L_NUMBER_AT_STREET.self::E_NUMERIC);

		$form->addText('numberInCity', self::L_NUMBER_IN_CITY)
				->addCondition(Form::FILLED)
					->addRule(Form::INTEGER,  self::L_NUMBER_IN_CITY.self::E_NUMERIC);

		$form->addText('city', self::L_CITY)
				->setRequired(self::L_REQURIED.  strtolower(self::L_CITY));

		$form->addText('zip', self::L_ZIP)
			->setRequired(self::L_REQURIED.  strtolower(self::L_ZIP))
				->addRule(Form::PATTERN, 'PSČ musí mít 5 číslic', '([0-9]\s*){5}');

		if($withOtherPayer)
		{
			$form->addGroup(self::L_LEGEND_P);
			$form->addText('firstNamePayer', self::L_FIRST_NAME)
				->setRequired(self::L_REQURIED.  strtolower(self::L_FIRST_NAME));

			$form->addText('familyNamePayer', self::L_FAMILY_NAME)
				->setRequired(self::L_REQURIED.  strtolower(self::L_FAMILY_NAME));

			$form->addText('streetPayer', self::L_STREET)
					->setRequired(self::L_REQURIED.  strtolower(self::L_STREET))
					->addRule(Form::PATTERN,  self::E_STREET,'\D+');

			$form->addText('numberAtStreetPayer', self::L_NUMBER_AT_STREET)
					->setRequired(self::L_REQURIED.  strtolower(self::L_NUMBER_AT_STREET))
					->addRule(Form::INTEGER,  self::L_NUMBER_AT_STREET.self::E_NUMERIC);

			$form->addText('numberInCityPayer', self::L_NUMBER_IN_CITY)
					->addCondition(Form::FILLED)
					->addRule(Form::INTEGER,  self::L_NUMBER_IN_CITY.self::E_NUMERIC);

			$form->addText('cityPayer', self::L_CITY)
					->setRequired(self::L_REQURIED.  strtolower(self::L_CITY));

			$form->addText('zipPayer', self::L_ZIP)
				->setRequired(self::L_REQURIED.  strtolower(self::L_ZIP))
				->addRule(Form::PATTERN, 'PSČ musí mít 5 číslic', '([0-9]\s*){5}');
		}

		$form->addSubmit('send', self::L_SEND);

//		$form->onSuccess[] = array($this, 'PersonalFormSucceeded');
		return $form;
	}

A v presenteru:

public function renderDefault($country,$type,$typeOfPay)
	{
		$this->country = $country;
		$this->type = $type;
		$this->typeOfPay=$typeOfPay;
	}

	protected function createComponentPersonalForm()
	{
		if($this->typeOfPay=='other') $withOtherPayer=1; else $withOtherPayer=0;
		$form = (new \App\Forms\PersonalFormFactory())->create($withOtherPayer);
		$form->onSuccess[] = array($this, 'personalFormSucceeded');

		return $form;
	}


	public function personalFormSucceeded($form,$values)
	{

			$this->flashMessage('Pokračujeme dál v objednávce...');
			$this->forward("PayForm:default");

	}

Editoval stepos (4. 5. 2016 12:57)

Šaman
Člen | 2667
+
0
-

Nejspíš se stalo to, že jsi přilinkoval soubor netteForms.js? Většina chyb je pak zachycena javascriptem dřiv, než se vůbec odešle formulář. Teprve pokud tohle projde (třeba vyplý JS), tak se pak znovu validuje na straně serveru a to vypíše chybu u políčka.
Pokud se jedná o povinná pole, tak ty zachycují už prohlížeče samy o sobě, takže tam ani vypnutá JS validace nepomůže a vyskočí něco (alert, bublina, záleží na prohlížeči).

stepos
Člen | 36
+
0
-

Díky.
No, to jsem taky hledal, ale kdyby byl špatný netteForms.js, tak firebug hlásí chybu, normálně s ním pracuje.
Nevěděl jsem, že červené hlášky vedle políčka vykresluje php, myslel jsem, že to dělá taky js.
A co s tím mohu dělat? Když zkusím ten js nenačítat, skutečně mi firefox začne cpát svoje bubliny s texty typu „vyplň pole v požadovaném formátu“ – hlášky, které jsem vůbec nezadával.