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.