Vycisteni formulare po odeslani AJAXem
- blueticket
- Člen | 41
Zdravim vas,
narazil jsem na divny problem ohledne AJAXoveho odeslani formulare. Formular se odesle, snippet se prekresli, vsechno je spravne, jenomze po odeslani zustanou vsechny fieldy ve formulari vyplneny a prestane fungovat AJAXove, tedy s postback-em, nasledne jde opet AJAXove (tedy se to strida, jednou AJAX, jednou klasicky post, ale vzdy zustane tentyz field vyplnen ve vsech vykreslenych formularich). Ten formular se na strance vykresli N-krat, tedy ne pouze jednou, jde totiz o komentare k timeline eventum (neco podobne, jak na facebooku)
kod v latte:
{foreach $timeline_rows as $row}
<form n:name="commentTimeline" class="ajax">
<div class="input-group" style="float:left;padding:10px;background-color: #EDEBE4;">
<input type="hidden" n:name=snippet_id value="{$row->id}" />
<input type="text" n:name=comment class="form-control font_size_13px" style="z-index: 0;" placeholder="{_ 'Write a comment'}...">
<span class="input-group-btn">
<button class="btn btn-default font_size_13px" type="submit" n:name=btnSubmit><i class="fa fa-comment fa-1x"></i></button>
</span>
</div>
</form>
{/foreach}
Kod v presenteru:
protected function createComponentCommentTimeline() {
$form = new Form();
$form->addHidden("snippet_id");
$form->addText("comment")->setRequired();
$form->addSubmit('btnSubmit')->onClick[] = array($this, 'commentSucceeded');
return $form;
}
public function commentSucceeded($button) {
try {
$values = $button->getForm()->getValues();
$this->data_model->addTimelineComment($this->logged_in_id, $this->profile_id, $values['snippet_id'], $values['comment']);
if ($this->presenter->isAjax())
{
$this->invalidateControl('areaComments');
$this->invalidateControl('areaCommentTimeline');
}
} catch (\Exception $ex) {
$this->flashMessage($ex->getMessage());
}
}
a @layout.latte obsahuje javascript:
<script type="text/javascript">
/* Volání AJAXu u všech odkazů s třídou ajax */
$("a.ajax").on("click", function (event) {
event.preventDefault();
// zobrazení spinneru a nastavení jeho pozice
$("#ajax-spinner").show();
$.get(this.href);
});
/* AJAXové odeslání formulářů */
$("form.ajax").on("submit", function () {
$(this).ajaxSubmit();
return false;
});
$("form.ajax :submit").on("click", function () {
$(this).ajaxSubmit();
return false;
});
</script>
Nevidite nahodou nekdo o jaky problem se jedna? Dekuji moc!
- Hurass
- Člen | 114
Data z formuláře můžeš odstranit v metodě
commentSucceeded před překreslením snippetů.
Aby ti fungovalo AJAXové odeslání formuláře několikrát po sobě, použit
on submit takto:
<script>
$("body").on("submit", "form.ajax", function () {
$(this).ajaxSubmit();
return false;
});
</script>