Nefungující validace po ajax požadavku

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

Zdravím,
už se to tady několikrát řešilo, ale z uvedených řešení nejsem moc chytrý. Lépe řečeno jsem tyto řešení zkoušel ale žádné nepomohlo.
Uvedu tedy problém. Mám formulář, na kterém provádím AJAX operaci. Zároveň bych však chtěl tento formulář validovat. Ajax operace se spouští po submitu a pro validaci používám live validaci z doplňků (https://componette.org/search/?…).
Validace funguje jen do té doby než provedu AJAX operaci. Pak místo live validace funguje údajně validace prohlížeče.

Neměl by někdo nějakou radu, která by mi zaručila funkčnost validace i po provedení AJAX požadavku?

Přikládám ajax soubor, ve kterém řeším ajax formuláře:

$(function () {
	$("a.ajax").live("click", function (event) {
		event.preventDefault();
		$.get(this.href);
	});
        $("form.ajax").live('submit',function () {
                $(this).ajaxSubmit();
                return false;
        });
        $("form.ajax :submit").live('click',function () {
                $(this).ajaxSubmit();
                return false;
        });
});
redhead
Člen | 1313
+
0
-

Mělo by snad jít po úspěšném AJAX requestu (a nahrazení snippetu v HTML) zavolat nad oním formulářem funkci:

Nette.initForm(formElement)

gavec
Člen | 68
+
0
-

Tím myslíš hodit za konec snippetu tento kód?

<script type="text/javascript">
	Nette.initForm('form#frm-kontaktForm');
</script>

Editoval gavec (13. 7. 2012 13:16)

redhead
Člen | 1313
+
0
-

Spíš bych se to pokusil udělat někde na straně klienta a univerzálně (nepřenášet to ze serveru).

Předpokládám, že používáš standardní addon ‚AJAX s jQuery‘. Můžeš upravit funkci updateSnippet(), aby prohledala onen snippet a inicializovala všechny formuláře v něm. Něco na způsob:

<script>
jQuery.nette.updateSnippet = function (id, html) {
	var snippet = $("#" + id);

	// nejdriv aktualizuj snippet
	snippet.html(html);

	// pak najdi vsechny formulare ve snippetu a kazdy inicializuj
	snippet.find('form').each(function() {
		Nette.initForm(this);
	});
};
</script>

Kód jsem nezkoušel, ale měl by fungovat.

EDIT: tento kus kódu můžeš includovat do všech stránek a pak všechny formuláře, které se kdy přenesou AJAXem, by měly spouštět live validaci.

Editoval redhead (13. 7. 2012 16:14)

gavec
Člen | 68
+
0
-

Paráda. Funguje díky moc.