Aplikování document.ready() po AJAX požadavku

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

Ahoj,
jquery.nette.js způsobuje, že po aktualizování části stránky pomocí AJAXu už na něj nejsou aplikovány změny z $(document).ready() metody, takže ta znovunačtená část je, co se týče Javascriptu, „mrtvá“.

Googlil jsem a je to hodně častý problém, nicméně všichni radí použít metodu live(), což jquery.nette.js dělá. Nevím tedy, jak to myslí…

Honza Marek
Člen | 1664
+
0
-

LastHunter napsal(a):

Ahoj,
jquery.nette.js způsobuje, že po aktualizování části stránky pomocí AJAXu už na něj nejsou aplikovány změny z $(document).ready() metody

Nezpůsobuje, to je normální stav.

Pokud potřebuješ na metody navěsit nějaké handlery, tak použij funkci jQuery live.

Tedy místo

$(function () {
	$("a").click(funkce);
});

bude

$("a").live("click", funkce);

To způsobí navěšení události, kdykoliv se objekt a objeví. Nikoliv jen po načtení stránky.

Pokud potřebuješ víc než navěšení událostí, je potřeba použít jQuery plugin livequery.

Ondřej Mirtes
Člen | 1536
+
0
-

OK, díky. A nelze náhodou po updatu snippetů zavolat znova tu metodu ready()? :)

Protože třeba nějaké hovery na tlačítka jsou v pohodě, ty se do live dají přepsat, ale co když mám v ready toto:

$(function() {
	$(".nospam").hide();
	$("input.nospam").val("no" + "spam");
});

A zrovna mám ve snippetu chráněný formulář. Už se mi stalo, že se mi po AJAX odezvě tato automaticky skrývaná pole znovu objevila, ale nevěděl jsem co s tím.

Editoval LastHunter (4. 11. 2009 18:43)

Honza Marek
Člen | 1664
+
0
-

Tak to by šlo taky, pokud bys měl tu funkci někde uloženou.

function poNacteni() {
	...
}

// zavolání po načtení stránky
$(poNacteni);

// po ajaxovém požadavku
jQuery.ajaxSetup({
	success: function () {
		jQuery.nette.success();
		poNacteni();
	}
});