Before a after sumbit callback na formulare

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

Zdravim,
pouzivam nette.ajax.js. Potreboval by som moznost definovat callback na formular, ktory bude zavolany este pred jeho odoslanim a dalsi callback, ktory sa zavola po uspesnom odoslani formularu.
Ked pouzijem triedu ajax, tak uz funkciu submit nemozem nabindovat. Ako mozem definovat co najjednoduchsie funkcie, ktore sa vykonaju pred a po odoslani?
Dakujem.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Jsou dva způsoby: buď pomocí obecné extension pro všechna formulářová odeslání, anebo specificky pro konkrétní formulář (platí relativně pro obojí :) ):

$('form').submit(function () {
    ... some your code before sending request ...
    $(this).netteAjax();
    ... some your code after sending request ...
});
Nox
Člen | 378
+
0
-

Nebo podobný kód co psal vojtech.dobes, ale místo konkrétního kódu před/po použít pubsub

pogo
Člen | 29
+
0
-

Vdaka za odpovede.

Mam nasledujuci kod:

<script>
	$(document).on('submit', '.filter-form', function ()
	{
		$this = $(this);
		$this.netteAjax();
		return false;
	}
</script>

Triedu ajax dany formular nema. Pri tomto pouziti ale je formular odosielany pomocou GET. Ako by som mohol priradit funkciu na success? Dalo by sa to nejak pomocou extensions, ale nie globalne, ale na konkretny element?

Editoval pogo (9. 11. 2012 15:41)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Takhle se ten formulář posílá jako GET? To je zvláštní, podívám se na to.

Metoda vrací to samé, co $.ajax(). Takže lze volat:

$this.netteAjax().done(function () {
    ... some code on success ...
});

Etc.

Pokud to skutečně posílá GET, pokusím se to vyřešit. Jako workaround zkus předat metodě objekt {type: 'post'}.

pogo
Člen | 29
+
0
-

Po dlhsej dobe som sa vratil k tomuto problemu a nasiel som riesenie pre ten GET. Potrebne je totiz posunut dalej event (premenna e v argumente):

<script>
$(document).on('submit', '.filter-form', function(e)
{
  $this = $(this);
  $this.netteAjax(e);
  return false;
}
</script>

Teraz uz spravne deteguje, ze sa jedna o formular, pouzije POST a spravnu adresu z action formulara. Rovnako aj funkcia .done() funguje presne podla ocakavani. Vdaka.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Hm, díky za vyřešení, tohle by dle mého soudu mělo fungovat i bez objektu události, opravím to.