Po nastavení setDisabled() u prvku Select nedojde ke spuštění funkce v $form->onSuccess[]

br356
Člen | 2
+
0
-

Funkce v presenteru:

$inputPolozka = $formular->getComponent(‘selectTyp’);
$inputPolozka->setDisabled();
$inputPolozka->setDefaultValue($typ);

definice ve formuláři:
$form->addSelect(‘selectTyp’, ‘Měřidlo:’, $typ)
->setDefaultValue(key($typ));

pokud není tato položka vypnutá, odeslání formuláře funguje, po vypnutí položky se formulář neodešle. Nesetkal se s tímto prosím někdo?
Děkuji za nasměrování kde by mohl být problém.

MajklNajt
Člen | 501
+
0
-

kde v presenteri voláš setDisabled()? predpokladám, že v render metóde, čo je neskoro, musíš to zavolať v action

Editoval MajklNajt (Včera 11:32)

br356
Člen | 2
+
0
-

to setDisabled volám ve funkci handle…, vyřešil jsem to nakonec tak trochu divoce že schovám prvek select a zobrazim text s požadovanou hodnoutou.
Když jsem vypnul select prvek jakkoli (nevykreslil jsem ho, nastavil v html disabled) tak se celý formulář neodeslal, předpokládám že to neprošlo přes validaci. Nevím jestli je to problém jen u mně z nějakého důvodu či je to bug v nette.

Marek Bartoš
Nette Blogger | 1280
+
0
-

Handler se ti při zpracování formuláře nezavolá, formulář má vlastní, interní handle. Zakázat prvek formuláře musíš nejpozději v action (nebo při vytváření kompontenty), aby to fungovalo při renderu i při zpracování formuláře.

To, že jsi prvek nevykreslil Nette neví – i kdyby si to evidovalo, tak je riskantní z něj udělat nepovinný. A zpracování probíhá dřív než render, takže to ani vědět nemůže.
Stejně tak nesmí brát ohled na html atributy – ty si může kdokoli změnit přímo v prohlížeči, nebylo by to bezpečné.

Editoval Marek Bartoš (Včera 15:03)

mskocik
Člen | 65
+
-1
-

br356 napsal(a):

předpokládám že to neprošlo přes validaci

A skúšal si nastaviť na tom selecte setPromt()?

Marek Bartoš
Nette Blogger | 1280
+
0
-

@mskocik A to má jakou souvislost? Prompt je jen nápověda pro uživatele, s validací nemá nic společného.

MajklNajt
Člen | 501
+
0
-

br356 napsal(a):

to setDisabled volám ve funkci handle…, vyřešil jsem to nakonec tak trochu divoce že schovám prvek select a zobrazim text s požadovanou hodnoutou.
Když jsem vypnul select prvek jakkoli (nevykreslil jsem ho, nastavil v html disabled) tak se celý formulář neodeslal, předpokládám že to neprošlo přes validaci. Nevím jestli je to problém jen u mně z nějakého důvodu či je to bug v nette.

ako som písal, volaj setDisabled() v metóde action... (nie handle... nie render... nie nič iné) a problém je vyriešený, nemusíš robiť nič divoké

mskocik
Člen | 65
+
0
-

Marek Bartoš napsal(a):

@mskocik A to má jakou souvislost? Prompt je jen nápověda pro uživatele, s validací nemá nic společného.

Obecne máš pravdu. V prípade custom renderingu selectu by sa to nezvalidovalo. Ja som sa s tým už stretol.

$form = new Form();
$form->addSelect('select', 'Select', [
   'q' => 'one',
   'w' => 'two',
   'e' => 'three'
]);
$form->addText('text', 'Text');
$form->addSubmit('save','Send');
{form form}
  <select name="select">
    <option value="">Prompt</option>
    <option value="q">1</option>
    <option value="w">2</option>
    <option value="e">3</option>
  </select>
  {input text}
  {input save}
{/form}