Ajax, selectBox, formulář – začátečník
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Radoss
- Člen | 15
Dobrý den,
prosím o radu s problémem. Podobný problém se ve foru řešil už vícekrát, ale i přesto se mi nepodařilo najít řešení. S Ajaxem nemám zatím větší zkušenosti.
Co chci docílit, v selectBoxu vyberu položku a na základě ní se pak automaticky doplní další data do inputu.
Postupoval jsem podle tohoto řešení https://forum.nette.org/…aru-s-ajaxem .
Výsledek je takový, že se mi data vypisují, ale hodně podivně:
- Ulice: ulice 2 Číslo popisné: cislo popisne 2 Město: mesto 2
- Číslo popisné:
- Město:
Muj kód
<?php
class HomepagePresenter extends Presenter
{
private $objednavatel = array(
'1' => 'Objednavatel 1',
'2' => 'Objednavatel 2',
'3' => 'Objednavatel 3'
);
public function renderDefault()
{
$this->template->form = $this['formObjednavka'];
}
public function createComponentFormObjednavka()
{
$form = new AppForm;
$form->addSelect('objednavatel', 'Objednavatel: ', $this->objednavatel);
$form->addText('ulice', 'Ulice: ');
$form->addText('cp', 'Číslo popisné: ');
$form->addText('mesto', 'Město: ');
$form->addSubmit('submit1', 'Odeslat');
$form->onSubmit[] = array($this,"onSubmit");
$form['objednavatel']->getControlPrototype()
->onchange('loadBox(this.value);');
return $form;
}
public function onSubmit(Form $form)
{
$data = $form->getValues();
Debug::dump($data);
}
public function handleLoadData($value)
{
$form = $this->getComponent('formObjednavka');
$form['ulice']->setValue('ulice '.$value);
echo $form['ulice']->getLabel();
echo $form['ulice']->getControl().'<br>';
$form['cp']->setValue('cislo popisne '.$value);
echo $form['cp']->getLabel();
echo $form['cp']->getControl().'<br>';
$form['mesto']->setValue('mesto '.$value);
echo $form['mesto']->getLabel();
echo $form['mesto']->getControl();
$this->terminate();
}
}
?>
V šabloně
{control $form begin}
<ul>
<li>{$form['objednavatel']->label} {$form['objednavatel']->control}</li>
<li>{$form['ulice']->label} {$form['ulice']->control}</li>
<li>{$form['cp']->label} {$form['cp']->control}</li>
<li>{$form['mesto']->label} {$form['mesto']->control}</li>
</ul>
{$form['submit1']->label} {$form['submit1']->control}
{control $form end}
Skript:
<script type="text/javascript">
function loadBox(value)
{
console.log(value);
$.get("?do=loadData", {"value": value}, function(data) {
$('#frmformObjednavka-ulice').parent().html(data);
$('#frmformObjednavka-cp').parent().html(data);
$('#frmformObjednavka-mesto').parent().html(data);
});
}
</script>
Myslím, že těch chyb bude více. Už jsem toho vyzkoušel více, ale pořad mám chaotický výsledek.
- Radoss
- Člen | 15
Zkusim se zeptat jednodušeji.
Když mam handle metodu:
<?php
public function handleLoadData($value)
{
$form = $this->getComponent('formObjednavka');
$form['ulice']->setValue('ulice '.$value);
echo $form['ulice']->getLabel();
echo $form['ulice']->getControl();
$form['cp']->setValue('cislo popisne '.$value);
echo $form['cp']->getLabel();
echo $form['cp']->getControl();
$form['mesto']->setValue('mesto '.$value);
echo $form['mesto']->getLabel();
echo $form['mesto']->getControl();
$this->terminate();
}
}
?>
Jakým způsobem vykreslím znovu formulář, který jsem naplnil daty pomicí setValue(), aby nebylo v handle metodě presenteru echo…
<?php
echo $form['ulice']->getLabel();
echo $form['ulice']->getControl();
echo $form['cp']->getLabel();
echo $form['cp']->getControl();
atd.
?>
Děkuji za trpělivost.