Autor | Zpráva | ||
---|---|---|---|
HeWeR Profil |
#1 · Zasláno: 30. 12. 2009, 05:08:00
Zdravím,
snad celé dnení ráno si lámu hlavou nad tímto problémem: Načtu si na na určenou akci do stránky index.php AJAXovém loadem část nějáké jiné stránky: $("#SemMiToHod").load("soubor.php #tentoprvek"); V pohodě, prvek se nakrásno načte. Řekněme, že má kód: <div id="tentoprvek"><p id="hop">Click!</p></div> A taky uvažujme, že v JavaScriptovém kódu stránky index.php je deklarováno toto: $("#hop").click(function(){ alert("BafikyBaf!"); }); Člověk by správně očekával, ale po AJAXovém NAČTENÍ do DOMu dokumentu a po kliknutí na "Click!", nám vyskočí alert "BafikyBaf". Jenomže to nefunguje. 1. Nevíte proč? Nevidím v tom logiku. Pokud si #tentoprvek vložím např. pomocí "append" (tzn. IMHO úplně stejným způsobem do dokumentu), vše funguje. 2. Nevíte, jak to obejít? Potřebuju navazovat na části "loadnuté" stránky další JavaScriptové akce. Děkuji! |
||
nightfish Profil |
#2 · Zasláno: 30. 12. 2009, 09:07:56
zkus to nahradit za
$("p#hop").live('click', function(e){ alert("BafikyBaf!"); }); „Člověk by správně očekával, ale po AJAXovém NAČTENÍ do DOMu dokumentu a po kliknutí na "Click!", nám vyskočí alert "BafikyBaf". Jenomže to nefunguje.“ zřejmě chování jQuery - bind() nefunguje na prvky přidané v budoucnu, zatímco live() ano |
||
_es Profil |
#3 · Zasláno: 30. 12. 2009, 09:29:30
HeWeR:
Treba uvažovať o tom, kedy sa ktorý príkaz JavaScriptu vykoná. Nepoznám veľmi jQuery, no nevykoná sa príkaz $("#hop").click(function(){ alert("BafikyBaf!");}); vtedy, keď ten prvok ešte neexistuje? Nenastáva po tom "nahratí" prvku zmazanie jeho udalostí? |
||
Nox Profil |
#4 · Zasláno: 30. 12. 2009, 10:17:34
nightfish:
„zřejmě chování jQuery - bind() nefunguje na prvky přidané v budoucnu, zatímco live() ano“ Nejsem expert na JS, ale myslím že to není až tak jQuery chování, je to stejné jako bych chtěl dát onclick handler na neexistující prvek, naopak live je spíš spešl věc, že se aplikuje plošně i na později přidané Jinak s oběma příspěvkama souhlasím Možná je alternativa: $("#SemMiToHod").load("soubor.php #tentoprvek", function(){ $("#hop").click(function(){ alert("BafikyBaf!"); }); }); ale nejsem si jistý jestli se ten callback náhodou nezavolá sice po získání dat, ale ještě před vložením do stránky, ten live() bude jistější |
||
HeWeR Profil |
#5 · Zasláno: 30. 12. 2009, 13:54:47
nightfish:
zřejmě chování jQuery - bind() nefunguje na prvky přidané v budoucnu, zatímco live() ano Tomu sem právě nerozumněl. Když prvek přidám např. pomocí .html(), tak na něj bind funguje normálně. Mám to teda chápat tak, že je rozdíl, když: - script sám něco dopíše (append, html, val) - script načte jiný kus kódu z nějákého jiného zdroje? Jinak, live() funguje. Děkuju! |
||
Časová prodleva: 14 let
|
0