Potíže s AJAXEM onchange v presenteru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Petr Parolek
Člen | 455
+
0
-

Ahoj,

mám potíže s formulářem ve spojením s AJAX. Potřebuju načíst data do druhého selectboxu s obcemi, když vyberu z prvního selectboxu okres.

Našel jsem řešení:

https://forum.nette.org/…o-selectboxy#…

Ale načtou se mi data do druhého selectboxu i po načtení stránky, ale já chci až po výběru okresu!

...
$form->addSelect('oid', 'Okres:', $this->users->fetchOkresy()->order('nazev')->fetchPairs('id','nazev'))
        ->setPrompt('-- Vyberte --');
    $form->addSelect('mid', 'Obec:', $this->users->fetchObce()->order('nazev')->fetchPairs('id','nazev'))
        ->setPrompt('-- Vyberte --');
		$form->addSubmit('send', 'Registrovat se');

		$form->onSuccess[] = callback($this, 'signFormSubmitted');
...

...
public function handleChangeokresy($okres) {
            $result = $this->users->fetchObce()
                                        ->where(array('okres_id' => $okres))->order('nazev')
                                        ->fetchPairs('id','nazev');
            $result[0] = "---";
            $this->sendResponse(new JsonResponse($result));
        }
...

JS:

<script type="text/javascript">
        $(function() {
                $("#frm-registrationForm-oid").change(function() {
                    $.getJSON({link Changeokresy!},{ okres: $(this).val(), ajax: 'true' }, function(array) {
                        var options = '';
                        for (var key in array) {
                            options += '<option value="' + key + '">' + array[key] + '</option>';
                        }

                        $("#frm-registrationForm-mid").html(options);
                        $('#frm-registrationForm-mid option:first').attr('selected', 'selected');
                    });
                });
            });
</script>

Prosím kde mám chybu?

Díky moc.

EDIT:

if ($do == "Changeokres") {
        $form->addSelect('mid', 'Obec:', $this->users->fetchObce()->order('nazev')->fetchPairs('id','nazev'))
            ->setPrompt('-- Vyberte --');
    }
    else {
        $form->addSelect('mid', 'Obec:', Array())
            ->setPrompt('-- Vyberte --');
    }

Toto mi taky nefunguje – lépe řečeno, neuloží se mi do db obec

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'mid' cannot be null

Ještě přiložím metodu z modelu:

public function register ($values) {
        $password = $values['password'];
        $salt = $values['username'];
        $hash = hash_hmac('sha256', $password, $salt);
        return $this->database->table('users')->insert(array(
                           'username' => $values['username'],
                           'jmeno' => $values['firstname'],
                           'prijmeni' => $values['lastname'],
                           'pohlavi' => $values['gender'],
                           'password' => $values['password'],
                           'mail' => $values['email'],
                           'role' => "user",
                           'datum_naroz' => $values['rok']."-".$values['mesic']."-".$values['den'],
                           'mid' => $values['mid'],
                           'oid' => $values['oid'],
                         ));
    }

Editoval ppar (31. 3. 2015 21:18)