ugrás a tartalomhoz

jQuery: selector + ajax együtt nem megy...

mATTIAS · 2007. Dec. 26. (Sze), 21.37
Üdv!

Van nekem egy problémám a jQuery-vel, és szeretném a segítségeteket kérni!

Adott egy kód:
$(document).ready(function(){
  $("input").click(function(){window.alert("Mukodik")});
});
Ez mind szép, és jó működik az összes INPUT elemmel, de ha a load függvénnyel frissitem egy DIV elem tartalmát:
$("#content").load("output.php");
és ez a div tartalmaz egy INPUT elemet, arra kattintva nem hajtódik végre a függvény.

Egyszóval, dinamikusan betöltött tartalom esetén a selectorok nem működnek, tapasztalt már valaki hasonlót, létezik megoldás?
 
1

nem így működik

razielanarki · 2007. Dec. 26. (Sze), 22.07
az eseménykezelő hozzárendelés csak az épp aktuálisan a dom-ban lévő elemekhez rendeli hozzá a föggvényt, a load-dal betöltött elemek ez után kerülnek be, így nem lesz hozzájuk rendelve semmi, neked kell kézzel hozzáadni az eseménykezelőket.

a jQuery FAQ idevágó pontja
2

Eseménykezelés működése

kicsy · 2007. Dec. 26. (Sze), 22.10
Pedig ha átgondolod a kódot érthető az ok: mikor a dokumentum betöltődik, akkor hívódik meg a document.ready eseményhandlere, ahova a kódot raktad: ez megkeresi az input elemeket és hozzájuk rendeli a click eventre a függvényed. A később, ajax-szal betöltött input ekkor még nem létezik.
Megoldás: a betöltés callback függvényében csináld meg mégegyszer az eventhandler hozzárendelést - a pazarlás elkerülése érdekében nyilván csak a #content-en belüli input elemekre.
3

Köszi

mATTIAS · 2007. Dec. 26. (Sze), 22.25
Köszi a segítséget!

A kódsokszorosítást elkerülendő, elneveztem a document.ready-nél meghívott függvényt, s azt a load callback-je ként meghívtam, minden működik.

$(document).ready(function start(){
 ...
 $("#content").load(url,{},function(){start()})
 ...
});
4

Apróságok

kicsy · 2007. Dec. 27. (Cs), 01.44
Arra figyelj hogy így szép kis rekurziót kapsz :)
Inkább vedd külön az input.click hozzárendelést egy start függvénybe, és azt hívd meg doc.readyből is. Callbacknél pedig elég a függvénynevet beírni, $("#content").load(url,{}, start) formában.
5

nincs rekurzió

mATTIAS · 2007. Dec. 27. (Cs), 14.40
Természetesen a load metódus, egy onclick eseményben van, így nincs rekurzuió,mindössze nem akartam fél oldalas kódokkal a fórumot tömni, csak a konkrét problémára rávilágítani