Jak dostat do formuláře změny v jQuery?
- smi
- Člen | 75
Omlouvám, jestli jsem netrefil správně sekci.
Mám formulář a v něm vytvořím selectBox a submit příkazy:
$this->addSelect('NID', 'Místo:');
...
$this->addSubmit('OK', 'Vložit')
->onClick[] = callback($this, 'insertSubmitted');
Tento select pak naplním přes jQuery a AJAX nějakým seznamem. (Opravdu se zobrazuje menu voleb select boxu).
Vyberu položku a formulář odešlu tlačítkem, ale hodnoty selectboxu se mi nepřenesou (NID obsahuje NULL).
Co jsem ještě zapomněl udělat? Invalidace a případně čeho, …
Nebo se to musí odeslat jinak ?
Díky za radu.
- smi
- Člen | 75
hAssassin napsal(a):
@smi > no select ma tu vlastnost ze memuzes podstrcit hodnotu (at uz pres JS nebo FireBug), ktera neni ve
<option value>
, takze jestli spis neni problem v tomhle pripade tady.
Aha. No, já vytvořím v Nette select prázdný a pak ho pomocí jQuery vytvořím (data dostanu AJAXem). Hodnoty odvíjejí od vyplnění PSČ, takže to musím dělat až on-line.
// Menu
var $menu = $('[id$=NID]');
// Vymazat predchozi menu
$menu.empty();
// Mam polozky menu => vytvorit
$menu.append("<option value='0'>Zvolte místo:</option>");
for (var i in payload.menu) {
$menu.append("<option value='" + i + "'>" + payload.menu[i] + "</option>");
}
Takže tam value je, ale nemám zkušenosti s tím jak se to chová.
- hAssassin
- Člen | 293
@smi > hm, tak tohle bych rekl, ze presne nebude fungovat… Co to udelat tak, ze by cely ten select byl snippet ktery by se generoval po vzdy po zadani PSC? myslim tim cely v cetne options. Nebo ho proste naplnit vychozimi hodnotami (nezavile na PSC), pak je po nacteni stranky JS smazat a pak po zadani PSC je znovu naplnit. Je to sice dost krkolomny ale fungovat by to mohlo. Ikdyz to prvni reseni je, myslim si, lepsi.
- smi
- Člen | 75
hAssassin napsal(a):
@smi > hm, tak tohle bych rekl, ze presne nebude fungovat… Co to udelat tak, ze by cely ten select byl snippet ktery by se generoval po vzdy po zadani PSC? myslim tim cely v cetne options. Nebo ho proste naplnit vychozimi hodnotami (nezavile na PSC), pak je po nacteni stranky JS smazat a pak po zadani PSC je znovu naplnit. Je to sice dost krkolomny ale fungovat by to mohlo. Ikdyz to prvni reseni je, myslim si, lepsi.
Snippety jsem ještě nezkoušel, ale jak Tě sleduji, tak to u nich asi skončí. Jinak je problém s hodnotami value, které se právě liší – nejde tedy jen vyměnit popisky.
Snippet mě odrazoval proto, že je ta položka uvnitř formuláře, tak jsem si začínáním s ním nechtěl komplikovat situaci, ale asi to jinak nepůjde.
Každopádně díky za rady.
- hAssassin
- Člen | 293
ano, to ze je to je uvnitr formulare si uvedomuju a nejsem si jisty jak
obalit snippetem
jen ten select
a invalidovat pouze
jeho. To necham na nekom jinym aby poradil.
Jinak text v <option>
menit muzes jak chces, ale hodnotu
atributu value si Nette
kontroluje a zmenu dovoli pouze na takovou
hodnotu, ktera je v seznamu. Proste si to hlida aby tam nebylo mozny zadat
nejakou blbost. Otazka ovsem je, jak se to bude chovat potom, co tam AJAXem
posles novy select
s novymi hodnotami. To fakt netusim.
- smi
- Člen | 75
hAssassin napsal(a):
ano, to ze je to je uvnitr formulare si uvedomuju a nejsem si jisty jak obalit
snippetem
jen tenselect
a invalidovat pouze jeho. To necham na nekom jinym aby poradil.Jinak text v
<option>
menit muzes jak chces, ale hodnotu atributu value siNette
kontroluje a zmenu dovoli pouze na takovou hodnotu, ktera je v seznamu. Proste si to hlida aby tam nebylo mozny zadat nejakou blbost. Otazka ovsem je, jak se to bude chovat potom, co tam AJAXem posles novyselect
s novymi hodnotami. To fakt netusim.
Podle mě value se přes tu kontrolu neprotlačí. (Vyřešil jsem to prozatím hidden položkou, kterou aktualizuji v onChange select boxu. Ten hidden se pak podá OK)
Snippet budu muset dát kolem selectu v šabloně formuláře ⇒ to pak ale nebudu moci použít default render. Zkusím to až bude čas, teď jsem v presu :o)
Editoval smi (15. 9. 2011 21:25)
- Jan Endel
- Člen | 1016
Nečetl jsem všechny příspěvky, ale nette kontroluje, jaké optiony jsi zadal do SB, čili jednoduše selectbox napln všemi možnostmi pro všechny psč (js ho disablni) a po vyplnění psč přebytečné hodnoty odmaž a opět js povol jeho změnu. Takhle ti to jednak odešle hodnotu co chceš a jednak to bude funkční i pro ty co nemají js, sice jsou ve velké menšině ale i tak. Akorát si ještě hlídej to, že ti někdo může poslat dvojci psč a hodnota selectboxu, co k sobě nepasuje, nevím jak máš navrhnutou aplikaci, jenom počítej i s tímto stavem.
- 22
- Člen | 1478
co je to za bejkovinu @pilec?
- stačí dbát živoyního cyklu presenteru
- myslet na to. že se setavuje formulář znova
tzn.: jediné, co je potřeba uložit změnu rodič. selectboxu třeba do session a pokud je session tak child selectbox naplnit příslušnou hodnotou a form vrací normálně validní data i po AJAXové změně bez nějakých hacků!
- smi
- Člen | 75
pilec napsal(a):
Nečetl jsem všechny příspěvky, ale nette kontroluje, jaké optiony jsi zadal do SB, čili jednoduše selectbox napln všemi možnostmi pro všechny psč (js ho disablni) a po vyplnění psč přebytečné hodnoty odmaž a opět js povol jeho změnu. Takhle ti to jednak odešle hodnotu co chceš a jednak to bude funkční i pro ty co nemají js, sice jsou ve velké menšině ale i tak. Akorát si ještě hlídej to, že ti někdo může poslat dvojci psč a hodnota selectboxu, co k sobě nepasuje, nevím jak máš navrhnutou aplikaci, jenom počítej i s tímto stavem.
Jenže k jednomu PSČ patří třeba i patnáct obcí (to je ta moje položka do select boxu).
Aplikace vyhledává podle PSČ nejbližšího doktora. To bych tedy přehazoval MB dat sem a tam – PSČ je 2 693, obcí 16 677. To je i na Nette moc. (Asi dojde na snippety :o) )
Zatím mě to chodí přes nastavení volby do hidden položky v onChange a poslání formuláře. Až bude čas, tak to upravím.
Nota bene je to do administrace, kde s tím bude dělat jen jeden člověk (a to je manželka, tak to nemusí být úplně maximálně promakané :o) )