invalidace formulare
- deric
- Člen | 93
# PHP 5.2.10–2ubuntu6.3, Nette Framework 0.9.3-dev
mam problem s prekreslenim formulare pomoci AJAXu
template:
@{block #content}
{snippet}
<div id="projectBox">
{control projectForm}
</div>
{/snippet}
a handlerer:
public function handleFetchCategories($id) {
$form = $this->getComponent('projectForm');
$form['select_box']->setItems(Model::fetchCategories($id));
$this->invalidateControl();
echo $form;
$this->terminate();
}
ve firebugu se mi zobrazi spravna odezva, ale formular se neprekresli. nevite v cem je problem?
- Ondřej Mirtes
- Člen | 1536
Ukaž podobu té odezvy (JSON) z Firebugu.
Zkoušels nedělat to přes echo $form a terminate(), ale prostě nechat
proběhnout celý cyklus Presenteru?
- deric
- Člen | 93
používám následující js:
function loadDefaultCategory(id)
{
$.post("?do=fetchCategories", {"cat_id": id}, function(data) {
$('#projectForm').parent().html(data);
});
}
zrušil jsem echo a terminate a odezva je:
{"state":{"ida":null},"snippets":{"snippet--frmProject":"<form action=\"\/admin.project\/edit\/?do=projectForm-submit\" method=\"post\" id=\"projectForm\" name=\"frm-projectForm\">\n\n<table>\n<tr>\n\t<th><label onclick=\"return false\" for=\"frmprojectForm-typ_akce_id\">Typ akce<\/label><\/th>\n\n\t<td><select onfocus=\"this.onmousewheel=function(){return false}\" onchange=\"loadDefaultCategory(this.value);\" name=\"typ_akce_id\" id=\"frmprojectForm-typ_akce_id\"><option value=\"1\">foo<\/option><option value=\"2\">letn\u00ed kurz<\/option><option value=\"3\" selected=\"selected\">zimn\u00ed kurz<\/option><\/select><\/td>\n<\/tr>\n\n<tr>\n\t<th><label onclick=\"return false\" for=\"frmprojectForm-vychozi_kategorie_ucastnika_id\">V\u00fdchoz\u00ed kategorie \u00fa\u010dastn\u00edka<\/label><\/th>\n\n\t<td><select onfocus=\"this.onmousewheel=function(){return false}\" name=\"vychozi_kategorie_ucastnika_id\" id=\"frmprojectForm-vychozi_kategorie_ucastnika_id\"><option value=\"10\">student<\/option><option value=\"11\">pracuj\u00edc\u00ed<\/option><\/select><\/td>\n<\/tr>\n\n<tr>\n\t<th> <\/th>\n\n\t<td><input type=\"submit\" class=\"button\" name=\"save\" id=\"frmprojectForm-save\" value=\"P\u0159idat\" \/><\/td>\n<\/tr>\n<\/table>\n\n<\/form>\n\n"}}
v js mám:
<script type="text/javascript" src="/js/jquery/jquery.js"></script>
<script type="text/javascript" src="/js/jquery/jquery.nette.js"></script>
a jquery.nette.js
je verze z githubu z příkladu fifteen
- deric
- Člen | 93
upravil jsem to trochu, teď se předává pouze nahraný element, ale hlásí mi to chybu:
uncaught exception: [Exception... "Could not convert JavaScript argument arg 0" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: /js/jquery/jquery.js :: anonymous :: line 957" data: no]
nevíte v čem může být problém?
Editoval deric (18. 12. 2009 17:40)
- deric
- Člen | 93
nefunguje mi toto:
var elem = $('#frm-selbox_id');
naopak toto je v pořádku:
var elem = document.getElementById('frm-selbox_id');
moc neovládám jQuery, můžete mi vysvětlit rozdíl?
používám místo výše uvedeného kódu:
var elem = document.getElementById(id).parentNode.innerHTML = data;
a to funguje
Editoval deric (19. 12. 2009 15:49)
- Filip Procházka
- Moderator | 4668
tohle musí fungovat
var elm = $('#frm-selbox_id');
pokud ne tak si stáhni nejnovější jQuery
- deric
- Člen | 93
používám jQuery v1.3.2.
fungovalo mi to jenom ve firefoxu, tak jsem to ještě upravil:
$.getJSON("?do=categories",{"cat_id": id}, function(j){
var options = '';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].id + '">' + j[i].name + '</option>';
}
$("select#frm-selbox_id").html(options);
});
a presenter generuje JSON odpověď