Ajax získání hodnoty ze select boxu
- flamengo
- Člen | 135
Potřebuji poradit. Mám následující funkcionalitu: ve formuláři kliknu
na select box a vyberu hodnotu, pomocí ajaxu se šáhne do databáze a
vytáhnou se data dle vybrané položky v select boxu a data se následně
zobrazí ve formuláři pod select boxem. Vycházel jsem z článku Dependent
form select with AJAX a v zásadě to funguje. Až na jeden podstatný
detail: v proměnné $value
nemám k dispozici hodnotu ze select
boxu. Nevíte, kde by mohla být chybka?
.control.php
public function handleCheckPlaces($value){
// výcuc dat z databáze zde nemám implementováno, zatím mě zajímá ta hodnota $value
// ...
$this->template->places = '$value = '. $value;
$this->invalidateControl('places');
}
.latte
{form addDate}
{label id_place /} {input id_place}
{snippet places}
{if isset($places)}
<div>{$places}</div>
{/if}
{/snippet}
{input send}
{/form}
<script>
{include #jsCallback, input => id_place, link => checkPlaces}
</script>
{define #jsCallback}
$('#{$control["addDate"][$input]->htmlId}').on('change', function() {
$.nette.ajax({
type: 'GET',
url: '{link {$link}!}',
data: {
'value': $(this).val()
}
});
});
{/define}
Ve firebugu asi vše v pořádku:
Parametry
do: matches-1158-checkPlaces
value: 2
Nevíte, kde dělám chybu? Díky díky.
- David Matějka
- Moderator | 6445
Parametry pro komponenty museji mit ve svem nazvu celou cestu, tedy vcetne
nazvu komponenty – v tvem pripade matches-1158-value
. pouze
value
bude dostupne jako parametr v presenteru. Pro vytvoreni toho
nazvu muzes pouzit funkci getParameterId
- flamengo
- Člen | 135
V latte jsme v javascriptu přejmenoval název proměnné, původní kód:
data: {
'value': $(this).val()
}
jsem nahradil následujícím:
data: {
'{$control->getParameterId('value')}': $(this).val()
}
a nyní funguje. V metodě handleCheckPlaces($value)
mám
hodnotu obsaženou ve $value
, takže super a díky moc!
Asi jsem měl uvést, že celé to je komponenta, která je v presenteru
vkládaná pomocí multiplieru, v šabloně asi takto
{control matches-$item->id}
.
Ještě jednou díky.
Editoval flamengo (17. 9. 2015 15:01)