isSubmitted mi nevraci objekt submit tlacitka ale TRUE, podle anotace by ale hodnotu true nemel vracet nikdy
- zacatecnik27
- Člen | 26
[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)
- ali
- Člen | 342
@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)