Odeslani formulare pomoci selectu?

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

Caues potreboval bych nejakym zpusobem odeslat formular ihned po vyberu nejakeho optionu v selectu.

Klasicka metoda je tahle : <select name=„state“ onchange=„this.form.submit();“>

Nevite nekdo jestli jde tohle udelat i v Nette?

nasel jem neco jako $addSelect(…)->onChange[]… , ale nefungovalo.

Dikes

David Grudl
Nette Core | 8218
+
0
-

->addSelect(...)->elementPrototype->onChange(...)

->addSelect(...)->controlPrototype->onchange(...)

krissott
Člen | 48
+
0
-

Tak nevim co delam spatne ale nemuzu ani za boha pridelit selectu dalsi atribut.
Pise mi to tohle : Cannot read an undeclared property SelectBox::$elementPrototype.
Kdyz to zkusim na samotny <form> podle manualu takto : $form->getElementPrototype()->id = ‚login-form‘;
Tak vse ok.
Ale jakmile zkusim neco takoveho : $form[‚select_name‘]->getElementPrototype()->id = ‚login-form‘;

nebo jak si psal ty primo za kontrukci selectu : ->addSelect(…)->elementPrototype->onChange(…)

tak to vraci porad tu samou hlasku : Cannot read an undeclared property SelectBox::$elementPrototype.

David Grudl
Nette Core | 8218
+
0
-

Sorry, tam mělo být getControlPrototype()

krissott
Člen | 48
+
0
-

Diky uz to fachaaaaa

krissott
Člen | 48
+
0
-

Mám jeste jednu otazecku.
Treba jdu na to spatne, poradte.
Resim casovy filtr u vypisu tabulky.
Nad tabulkou je defaultne select „Year“
po zvoleni roku by se mel objevit select „Month“
po zvoleni mesice by se mel objevit select „Day“.

takze jsem to chtel resit takhle:

$form->addSelect('year','Rok:',$years)->controlPrototype->onchange("submit();");
if($form->isSubmitted()){
  $values=$form->getValues();
  if(isset($values['year']))
   $form->addSelect('month','Měsíc:',$months)->controlPrototype->onchange("submit();");
  if(isset($values['month']))
   $form->addSelect('day','Den:',$days)->controlPrototype->onchange("submit();");
}

Jenze to nejde.
Prisel jsem na to ze cokoliv je za metodou isSubmitted() se nenacte spravne
pr.1

if($form->isSubmitted()){
       $values= $form->getValues();
       print_r($values);
      }
    $form->addSelect('year','Rok:',$years)->controlPrototype->onchange("submit();");
    $form->addSelect('month','Měsíc:',$m)->controlPrototype->onchange("submit();");
    $form->addSelect('day','Den:',$days)->controlPrototype->onchange("submit();");

pr.2

    $form->addSelect('year','Rok:',$years)->controlPrototype->onchange("submit();");
    $form->addSelect('month','Měsíc:',$m)->controlPrototype->onchange("submit();");
    $form->addSelect('day','Den:',$days)->controlPrototype->onchange("submit();");

if($form->isSubmitted()){
       $values= $form->getValues();
       print_r($values);
      }

Priklad 1 nevytiskne nic priklad 2 vytiskne vsechny hodnoty.
Jako by isSubmitted vse mazal…

Sorry za tak dlouhy dotaz…

vlki
Člen | 218
+
0
-

Nevím, zda-li to není záměr, ale proč submitovat formulář po zadání roku, pak měsíce a nakonec dne?
Není elegantnější to udělat přes javascript, který to bude postupně odhalovat?

soundake
Člen | 24
+
0
-

vlki napsal(a):

Nevím, zda-li to není záměr, ale proč submitovat formulář po zadání roku, pak měsíce a nakonec dne?
Není elegantnější to udělat přes javascript, který to bude postupně odhalovat?

Anebo to rovnou zobrazit celé? Jaký je důvod těch kroků?

David Grudl
Nette Core | 8218
+
0
-

Hodnoty prvků formuláře se načtou při volání isSubmitted(). Pokud se poté formulář změní, tak je potřeba manuálně hodnoty znovunačíst metodou processHttpRequest().