Jak ajaxově změnit možnosti v select boxu?
- Martin Mates
- Člen | 179
Mám formulář, kde je mimo jiné select box s výběrem tarifů pro danou oblast. Čeho chci docílit je, že když uživatel vyplní adresu, tak na událost onblur se ajaxem zjistí, jaké tarify jsou na dané adrese dostupné a podle toho se javascriptem upraví možnosti pro daný selectbox.
Všechno už mám hotové. Funguje to dobře, ALE, když javascriptem změním možnosti v selectboxu, a uživatel si vybere jednu z nich, tak Nette vyhodí při validaci fomuláře hlášku „Please select a valid option.“ Domnívám se, že Nette kontroluje, zdali nebyla podstrčena nějaká jiná hodnota než je původně na výběr.
Aby bylo jasno, ajaxový handler pouze vrací JASON tarifů a javascript se postará o zbytek. Neinvaliduje se žádný snippet ani se nijak nezasahuje do formuláře jako takového.
Nevím co s tím. Napadlo mě, ve zpracování ajaxového požadavku hrábnout do formuláře a změnit možnosti daného selectboxu, ale to mi bohužel nefunguje (resp. stále dostávám hlášku „Select a valid option.“). Zkusil jsem toto:
public function handleGetAvailableServices($address) {
if ($this->isAjax()) {
// Ziskani tarifu pro danou adresu
$services = $this->lumpyService->getAvailableServices($address);
// Zmena moznosti ve formulari
$this->getComponent('poptavkaForm')->getComponent('tarif')->setItems(array(14 => 'test', 9 => 'dalsi'));
// Odpoved JSON - seznam tarifu
$this->sendResponse(new JsonResponse($services));
}
}
Jak byste na to šli? Je lepší přístup spíše nějak dynamicky měnit formulář, než ho znásilňovat vlastním javascriptem? Jak v takovém případě překreslím pouze onen selextbox? Moc díky.