Javascriptben (/jQuery) ha megváltoztattam egy span ID-jét, akkor utána miért nem tud lefutni egy függvény az új ID-re hivatkozva?
tehát van egy <span id="v1">, ami tartalmaz egy változót (x).
Ha rákkantittunk az x-re, akkor az x megváltozik (ha x megfelel bizonyos dolgoknak), ez eddig stimmel. Ekkor az x kicserélődik, y lesz. Ezután erre az y-ra (ami a régi x) is leakarok futtatni egy másik függvényt, de előtte még megcserélem az id-jét, hogy már az új x-re, azaz az y-ra tudjam lefuttatni a függvényt.
De nem történik semmi. Viszont ha a régi ID-vel akarnám,akkor meg igen.
Valahogy nemtörténik meg az ID váltá vagy nemtudom.
Kipróbáltam többféleképpen is, végül ennél maradtam, de van egy olyan érzésem, hogy ez ilyen úton nem is fog működni.
$('v1')click(
itt van egy függvény ami az x-ből y-t csinál. Aztán:
document.getElementById("v1").setAttribute("id", "v2"); )
és akkor monjduk ha csak annyit szeretnék, hogy ha az új ID-re kattintva jöjjön ki egy alert.
$('v2')click( function alert(alert("helo")) )
szóval akkor ez így nem működik ...
Kezdő vagyok, próbáltam utána olvasni tényleg, de megakadtam.
Köszönöm, ha valaki válaszol.
Egy elemnek csak 1 ID-je lehet, tehát nem is cserélheted meg. Miért nem használsz inkább helyette calss-t?
Tegyél rá egy class-t, és arra futtasd le a fügvényedet.
Köszönöm az eddigi válaszokat! Kipróbáltam class-szal és name-el is, hogy azokat változtatom meg. Azok is megváltoznak a forráskódban, de ha a megváltozott class-ra akarok hivatkozni egy függvényben, úgy már nem működik.
(ha a css-ben megváltoztatom a színét, akkor oké azt érzékeli,de a következő függvény már nem tud működni)
vmi olyasmit olvastam, hogy ilyen esetben hiába változtattam meg, még amit eredetileg a body-ból betöltött class/id/name , azzal dolgozik az új függvény. Ami stimmel is, mert ha arra akarok hivatkozni (az eredeti class-ra), akkor úgy működik.
viszont arra nem találtam megoldást, hogy a függvény az új class-szal dolgozzon...
Eseménykezelőt csak létező objektumra tudsz bindelni. Amikor te a $('#v2ketto')-re bindeled a click()-et, akkor hol van neked v2ketto id-jű objektumod? Hát sehol, mivel akkor még csak #v2 van.
Megtehetnéd azt, hogy az első eseménykezelőbe teszed a másikat, így:
Viszont ez sem fog működni, mert attól, hogy átnevezted az id-t #v2ketto-re, az elsőnek ráaggatott eseménykezelő még rajt marad, és amikor elér a feldolgozás a document.getElementById("v2").innerHTML ="szia"; sorhoz, akkor hibát fog generálni, mivel akkor már #v2 id-jű objektum már nem létezik. Ha megnézed mondjuk Firefoxban, akkor gyönyörű szépen látszik, hogy mindkét eseménykezelő ott csüng az objektumon (a harmadik a jQuery saját eseménykezelője): [link]
Úgyhogy ezt a megoldást, ebben a formában el kell felejteni. Vagy azt csinálod, hogy az eseménykezelőkben mindig hozzáadod és eltávolítod azt az eseménykezelőt, amelyiket éppen kell, vagy használod $.on() metódust, annak is a delegált változatát: [link]
Ez esetben nem az adott objektumra, hanem egy olyan szülőelemre kerül bindelésre az eseménykezelő, amely biztosan létezik akkor, amikor elér a kódfeldolgozás az $.on() metódushoz.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!