isSubmitted mi nevraci objekt submit tlacitka ale TRUE, podle anotace by ale hodnotu true nemel vracet nikdy

zacatecnik27
Člen | 26
+
+1
-

[nette 2.4, dnes aktualizováno composer update, problém přetrvává]

proč někdy $form->isSubmitted() mi nevrátí očekávaný objekt submit tlacitka ale jenom TRUE, podle anotace by true snad nemel vracet nikdy ? Jak k tomu může dojít ? Jedná se o formulář vytvořený klasicky továrničkou do šablony umístěný pomocí {control jmeno} a obsahuje jen tri prvky textovou oblast, a dva submit buttony ruzne pojmenovane …

Když si vypíšu v metode blablaFormSucceeded kterou registruji v tovarnicce formulare prikazem $form->onSuccess[] = [$this, ‚blablaFormSucceeded‘]; hodnoty $form[‚submit_tlacitko1‘]->isSubmittedBy() pro vsechna existujici submit tlacitka v ramci formulare tak prekvapive, když je isSubmitted() hodnota jen TRUE ani jeden nevraci true, vsechny false :-(

To by prece nemelo nastat, nebo muze ?


navíc se to děje jaksi pseudonáhodně, obcas kdyz se odeslani podari a hodnotou …->isSubmitted() je objekt tlacitka podle ocekavani a jedno z …->isSubmittedBy() skutecne vrati true, ale staci se jen vratit zpet a znovu klepnout na odesilaci tlacitko a vyse popsany problem zopakuje znovu.

Editoval zacatecnik27 (18. 4. 2017 11:02)

CZechBoY
Člen | 3608
+
+1
-

hele taky se mi to deje (nette 2.3) a zatim jsem neprisel na to jak to vyvolat. v $_post je normalne tlacitko uvedeno.

ali
Člen | 342
+
0
-

Odesilas formular ajaxove?

Pokud jo, melo by stacit aktualizovat nette.ajax.js na nejnovejsi verzi.

CZechBoY
Člen | 3608
+
0
-

já mám klasickej ne-ajax formulář

ali
Člen | 342
+
0
-

@CZechBoY tak jsem po tom trosku zapatral, protoze se mi chyba zacala objevovat pri urcitych okolnostech a isSubmited() vraci TRUE, kdyz ten submit button uz ve formulari neexistuje pri dalsim volani.. zduplikoval jsem timto kodem (jak pro ajax tak ne-ajax form je chovani stejne):

protected function createComponentForm(): \Nette\Application\UI\Form {
	$form = new \Nette\Application\UI\Form;
	//$form->getElementPrototype()->setClass("ajax");

	$form->addSubmit("send1");
	$form->addSubmit("send2");

	if (rand(1, 2) === 1) {
		$form->removeComponent($form["send2"]);
	}

	$form->onSuccess[] = function (Nette\Application\UI\Form $form, array $values): void {
		bdump($form->isSubmitted());
	};

	$form->onSubmit[] = function (Nette\Application\UI\Form $form): void {
		if ($this->presenter->isAjax()) {
			$this->redrawControl("form");
		}
	};

	return $form;
}

Editoval ali (18. 5. 2017 7:11)

CZechBoY
Člen | 3608
+
0
-

@ali jj, neco takovyho si myslim taky. akorat nevim jak se to muze stat a jak to vyresit :D

no nic, to je uz muj problem :-) diky za debugging