změna hodnoty textinputu při selectbox onchange funguje pouze u jednoho z nich
- worsik
- Člen | 40
Ahoj, moc vás prosím o pomoc, nevím, kde je chyba
mám ve formu tyto inputy: (plus ještě další)
<?php
foreach ($virtuals as $vid)
{
$form->addContainer($vid);
$form[$vid]->addSelect('slaType','Typ SLA:',$sla)
->setHtmlId($vid)
->setValue($def[$vid]['id']);
$form[$vid]['slaType']->getControlPrototype()->class = "sla_type";
$form[$vid]->addDatePicker('start','Od:',10)
->setHtmlId('sla_start_'.$vid)
->setValue($def[$vid]['zacatek']);
$form[$vid]->addText('time','Trvání')
->setHtmlId('sla_time_'.$vid)
->setValue($def[$vid]['monthcount'])
->addRule(Form::FILLED, "Prosím vyplňte počet měsíců")
->addRule(Form::RANGE, 'Počet měsíců je omezen od %d do %d', array(1, 120))
->getControlPrototype()->style = "width: 60px"
;
}
?>
při změně hodnoty selectboxu potřebuji změnit data v obou textových polích (datum a trvání)
Javascript:
<script>
$('.sla_type').change(function () {
var el = this;
loadBox('#sla_time_'+el.id,$(el).val(),'sla_monthcount',el.id);
loadBox('#sla_start_'+el.id,$(el).val(),'sla_datestart',el.id);
});
// Načítání dat po selectboxu
function loadBox(destination,index,form,id)
{
$.get("?do=loadData&presenter=Realizations", {"index": index, "form": form, "id": id}, function(data) {
$(destination).val(data);
})
}
</script>
Funkce loadData() je definována v presenteru Realizations a projde v pohodě, v konzoli FireBugu se zobrazí výstupy
GET http://127.0.0.1/ss/?do=loadData&presenter=Realizations&index=1&form=sla_monthcount&id=3
200 OK
450ms
jquery.min.js (řádek 130)
Odezva
12
GET http://127.0.0.1/ss/?do=loadData&presenter=Realizations&index=1&form=sla_datestart&id=3
200 OK
391ms
jquery.min.js (řádek 130)
Odezva
8.7. 2010
Textové pole změní svou hodnotu na 12, což je správně, ale v poli datum zůstane původní hodnota, přičemž skript nezařve žádnou chybu.
V JS funkci loadBox() se mi při vložení
<script>
alert(data);
</script>
zobrazí postupně dvě okna, kde jedno je prázdné a druhé obsahuje
číslo 12.
Proč funkce nevidí výsledek, který mu vrací PHP funkce
handleLoadData()?
Pro jistotu sem dám i PHP funkci (slouží pro více možností, proto ty
ify)
⇒ jen zdůrazním, že podle FireBugu mi vrací správnou hodnotu, jen mi ji
JS neuloží do pole DatePicker
(zkoušel jsem natvrdo nastavit v JS onChange metodě naplnění nějakým
výrazem a pole se naplnilo v pohodě)
<?php
public function handleLoadData($index,$form,$id = false)
{
if ($form == 'addWork')
$array = dibi::query("SELECT id, priceperunit FROM deliveries WHERE iswork = 't'")->fetchPairs();
elseif ($form == 'addMaterial')
$array = dibi::query("SELECT id, priceperunit FROM deliveries WHERE iswork = 'f'")->fetchPairs();
elseif ($form == 'sla_datestart')
{
$realization = dibi::query("SELECT idrealization FROM virtualdevices WHERE id = $id")->fetchSingle();
$array = dibi::query("SELECT idsupporttype"
.",".Base::concat(array(
'extract(day FROM datestart)',
'.',
'extract(month FROM datestart)',
'.',' ',
'extract(year FROM datestart)',
))
." AS zacatek"
." FROM realizationsla WHERE idrealization = $realization")->fetchPairs();
}
elseif ($form == 'sla_monthcount')
{
$realization = dibi::query("SELECT idrealization FROM virtualdevices WHERE id = $id")->fetchSingle();
$array = dibi::query("SELECT idsupporttype, monthcount FROM realizationsla WHERE idrealization = $realization")->fetchPairs();
}
else
throw new ApplicationException("Vadná hodnota '$form' jako parametr fce handleLoadData()");
if ($index == "")
echo "";
else
echo $array[$index];
$this->terminate();
}
?>
- worsik
- Člen | 40
Tak mám novinku, zjistil jsem, že projdou pouze čiselná data a text ne…
Nechápu proč.
Je to omezení JS?
<script>
function loadBox(destination,index,form,id)
{
var data;
$.get("?do=loadData&presenter=Realizations", {"index": index, "form": form, "id": id}, function(data) {
alert(data);
$(destination).val(data);
$(destination).text(data);
})
}
</script>
Mám teď jeden SelectBox a tři TextInputy. Buď vyberu hodnotu ze Selectu a JS mi naplní Texty nebo si je vypíšu sám. Při automatickém vyplnění to ale vyplní jen hodnoty, které jsou čísla.
Proč?
Firebug konzole mi zobrazí správné výstupy všech tří hodnot, takže PHP
funguje dobře…
P.S.: Ten alert je tam kvůli zjištění, jestli mi ty data projdou (zobrazí se jen při číslech)
- worsik
- Člen | 40
SLÁVA
Znovu jsem se vrhnul na vyhledávání témat a konečně jsem narazil na řešení:
hiny napsal(a):
pjoter napsal(a):
Tak me uz to jede bylo to tim ze sem mel globalne nastaveno data-type na JSON
staci zakomentovat radek v jquery.nette.js
Díky za info.
Stačí tedy zakomentovat řádek v souboru jquery.nette.js
<script>
jQuery.ajaxSetup({
success: jQuery.nette.success,
// dataType: "json"
});
</script>