ajax from select onchange updatete db

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

Zdravím,

poradil by jste někdo jak vyřešit násleudjící situaci?

Mám 5 sloupců selectboxů, kde v každém sloupci jsou stejné hodnoty (1–5). Hodnota se vždy vzdahuje k dalšímu záznamu z db (jedná se o hodnocení). Chtěl bych ajaxem udělat to, že když v daném sloupci kliknu na některou z hodnot (což bude vždy selectbox v rozmezí 1–5 s nastavnou defaultní hodnotou podle sloupce, ve kterém se nachází) a změním ji na jinou, přesune se do odpovídajícícho sloupce. Viz příklad

1 (id 5) 2 (id 66) 3 (id 3) 4 (id 1) 5 (id 6)
1 (id 52) 3 (id 11) 4 (id 2)
1 (id 12) 3 (id 5)
1 (id 85)

Změním-li hodnotu 3 (id 3) na hodnotu 5. Přesune se do sloupce 5.

Zatím jsem to řešil takto:

každý selectbox jako samostatný formulář, který při změně zavolá metodu loadItemTargets(x,y)

protected function createComponentForm()
    {
           $callback = callback($this, 'save');
           $conn = $this->database;

            return new Multiplier(function ($itemId) use ($callback,$conn) {
            $form = new Form;


            $cr = array(
              '1' => '1',
              '2' => '2',
              '3'  => '3',
              '4'  => '4',
              '5'  => '5',
              );

            $form->addSelect('ctr', '.', $cr)->getControlPrototype()->onchange('loadItemTargets(this.value,'.$itemId.');');

            $form->addSubmit('send', 'Uložit');
            $form->onSuccess[] = $callback;
            return $form;
            });

}
<script type="text/javascript">
$(function () {
$.nette.init();
});

function loadItemTargets(value,r) {
    jQuery.get({link loadData! }, {"value": value,"r": r}, function(data) {
        jQuery('#frmformAddItem-target').replaceWith(data);
    }, "html");

}


</script>
public function handleLoadData($value,$id )
   {
         $this->database->table('table')->where('id', $id)->update(array(
                                                   'value' => $value,
                                                   ));
           $this->template->col1 = $this->database->table('table')->where('value',1);
           $this->template->col1 = $this->database->table('table')->where('value',2);
			$this->template->col1 = $this->database->table('table')->where('value',3);
			$this->template->col1 = $this->database->table('table')->where('value',4);
			$this->template->col1 = $this->database->table('table')->where('value',5);
           $this->terminate();
   }

.. ale vím že takto to nepůjde..Nejdřív jsem to zkoušel přes snipety, ale tam nevím jak předat ty dvě hodnoty (id a novou hodnotu) při změně selectboxu..