3 zavisle selectboxy s nette.ajax
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- aja86
- Člen | 2
Zdravíčko,
dle kuchařky (zde)
jsem si sprovoznil 3 závislé selectboxy, nicméně narazil jsem na problém
s předáváním proměných. Pro naplnění třetího, posledního, selectboxu
z databáze potřebuju údaje z OBOU předcházejících selectboxů. Jedná
se pouze o testovací úrivek kódu, proto jsou tam i chyby logiky, ale
o těch vím.
Budu moc vděčný, za popostrčení. Díky moc ;)
Presenter:
***
//Naplneni selectboxu misto na zaklade vyberu typu mista
public function handleFirstChange($valu)
{
if ($valu == '1') {
$secondItems = $this->database->table('sklad')->fetchPairs('ID_Sklad', 'Sklad');
}
else if ($valu == '2') {
$secondItems = $this->database->table('pop')->fetchPairs('ID_Pop', 'Pop');
}
else if ($valu == '3') {
$secondItems = $this->database->table('zakaznik')->fetchPairs('ID_Zakaznik', 'Cislo');
}
else {
$this['selectForm']['second']->setPrompt('Select from first')->setItems(array());
}
$this['selectForm']['second']->setPrompt('Select')->setItems($secondItems);
$this->invalidateControl('secondSnippet');
$typ = $valu; //TUTO HODNOTU POTŘEBUJI PřEDAT HANDLE SECOND, ALE NEJDE MI TO
}
//Naplneni selectboxu EVC na zaklade vyberu mista a typu mista
public function handleSecondChange($valu, $typ)
{
if ($valu) {
$thirdItems = $this->database->table('zarizeni')->where('ID_Misto', $valu)->where('Typ', $typ)->fetchPairs('ID_Zarizeni', 'EVC');
$this['selectForm']['third']->setPrompt('Select')->setItems($thirdItems);
}
//$this['selectForm']['third']->setPrompt('Select from second')->setItems(array());
$this->invalidateControl('thirdSnippet');
}
protected function createComponentSelectForm()
{
$form = new Form;
$form->addSelect('first', 'Typ místa:', array(1 => 'Sklad', 2 => 'Pop', 3 => 'Zakaznik'))
->setPrompt('Select');
$form->addSelect('second', 'Místo:')
->setPrompt('Select from first');
$form->addSelect('third', 'EVC:')
->setPrompt('Select from first');
$form->addSubmit('send', 'Submit');
$form->onSuccess[] = $this->processSelectForm;
return $form;
}
***
Latté:
***
{define #js}
<script type="text/javascript">
{include #jsCallback, input => first, link => firstChange}
{include #jsCallback, input => second, link => secondChange}
</script>
{/define}
{define #jsCallback}
$('#{$control["selectForm"][$input]->htmlId}').on('change', function() {
$.nette.ajax({
type: 'GET',
url: '{link {$link}!}',
data: {
'valu': $(this).val(),
}
});
});
{/define}
***