ajax from select onchange updatete db
- JanBE
- Člen | 62
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..