Po zajaxování nefunguje selectBox

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

Ahoj. Už pár dní se tu trápím s problémem ohledně dynamického načtení podkategorie. Vycházel jsem z tohoto článku. Řekněme, že máme jeden select box, do kterého na nahraji jednotlivé kategorie a po vybrání jedné z nich se načtou do druhého select boxu její podkategorie (pokud existují). Vcelku běžný případ.
Problém nastává jakmile se provede ajaxový dotaz, tak se sice podkategorie správně načtou, ale v tu chvíli je select box, do kterého se podkategorie načetly „nepoužitelný“. Neboli při odeslání formuláře se u vybrané podkategorie vypisuje NULL (u prvního select boxu je to v pořádku), na jquery $('select option').click(function ..., change … nereaguje. Ve zdrojovém kódu neobsahuje vlastnost selected, ikdyž je položka vybrána. Zkoušel jsem vlastnost selected přidat i v js funkci, ve které odesílám požadavek, ale ani to nereagovalo.

verze nette 2.0, php 5.4 – 5.5

Takto vypadá vytvoření komponenty v HomePresenteru:

 	...

	public function renderDefault() {
        	$this->template->_form = $this['deleteCategoryForm'];
    	}

	public function createComponentDeleteCategoryForm() {

        $form = new Form();
        $form->addSelect('categorySelect', 'Výběr kategorie', $this->listCategory)
                ->setPrompt('select');

        $form->addSelect('subcategorySelect', 'Výběr Subkategorie')
                ->setPrompt('select sub');

        $form->addSubmit('deleteSelected', 'Vymazat označenou');
        $form->onSuccess[] = callback($this, 'deletePhotosSuccess');

        return $form;
    }
	...

Požadavek odesílám takto:


	...

    $('#frmdeleteCategoryForm-categorySelect').live('change', function(event) {
        event.preventDefault();
        $.get("http://localhost/nette_projects/fotobanka/edit-category/?category_id=" + $("select option:selected").val() + "&lang=sk&do=reloadSelect");
        $("#ajax-spinner").show();
    });

...

V šabloně poté vykresluji:

{form deleteCategoryForm}
<fieldset>
    <legend>Mazání kategoie</legend>
    <table>
        <tr>
            <td class="requiredA-s">{input categorySelect}</td>
            <td class="requiredA-s">{snippet}{input subcategorySelect}{/snippet}</td>
            <td><div id="ajax-spinner"></div></td>
        </tr>
        <tr>
            <td colspan="3" align="right">{input deleteSelected}</td>
        </tr>
        <tr>
            <td colspan="3">
                <ul class=error n:if="$form->errors">
                    <li n:foreach="$form->errors as $error">{$error}</li>
                </ul>
            </td>
        </tr>
    </table>
</fieldset>
{/form}

A takto vypadá ajax handle:

public function handleReloadSelect($category_id) {
        $result = $this->editCategoryRepository->getSubCategory($category_id);

        if (count($result)) {
            $items = array();
            foreach ($result as $key => $value)
                $items[$key] = $value->name;

            $this['deleteCategoryForm']['subcategorySelect']->setPrompt('Vyberte kategorii');
            $this['deleteCategoryForm']['subcategorySelect']->setItems(array(0 => 'aaa', 1 => 'bbb'));
        } else
            $this['deleteCategoryForm']['subcategorySelect']->setPrompt('Žádná podkategorie');


        $this->invalidateControl();
    }

Problém tedy nastává v o okamžiku, kdy se vykoná ajaxový požadavek a subkategorie se nahrají do selectboxu. Připomínám, že po kliknutí na kategorii se subkategorie v pořádku nahrají, jak mají.

Nemáte někdo tušení, kde bych mohl dělat chybu?

Děkuji moc za pomoc a čas.

iNviNho
Člen | 352
+
0
-
<script>
$('select option').click(function ..., change … nereaguje
</script>

toto asi ani nepojde, skúsil by som

<script>
$("tvojselect").change(function() {...})
</script>

Vyskúšaj zmeniť

<?php
public function renderDefault() {
        $this->template->_form = $this['deleteCategoryForm'];
    }

na
public function actionDefault() {
        $this->template->_form = $this['deleteCategoryForm'];
    }
?>

Nič iné ma zatiaľ nenapadá :-\

llook
Člen | 407
+
0
-

Tak mě napadá, jestli po odeslání nezískáváš hodnoty přes $form->getValues() místo $form->getHttpData()? Metoda getValues totiž vyfiltruje jenom ty možnosti, které jsou definované.