jQuery topic - Szoftverfejlesztés fórum

üzenetek

hozzászólások


Sk8erPeter
(nagyúr)

Bocs, hogy belekontárkodom, nagyon sok részletből kimaradtam, és nincs is időm elolvasni az egész korábbi társalgást erről a súgó-megjelenítős dologról, de tulajdonképpen minek játszol a visibility CSS-tulajdonsággal? Van ezzel valami különösebb célod? Csak kavarja az egészet, a slideUp/slideDown tulajdonság állítgatja a display property-t (és azzal együtt nyilván folyamatosan dinamikusan változtatgatja pl. a height tulajdonságot), annak elégnek kellene lennie.
Ezentúl tulajdonképpen nem látom be, miért is van szükség erre az id-t szétbontós dologra split() függvénnyel, nagyon rugalmatlan megoldás, könnyű elrontani. Ha már ilyen módon van felépítve, nyugodtan lehetne a siblings() VAGY prev() vagy next() függvényeket használni. Egyébként is érdemes lenne egy nagyobb div-be vagy hasonlóba bepakolni magát a kérdőjelet, plusz a hozzá tartozó súgót, hogy logikailag is összetartozzanak, és akkor máris el lehet kerülni azt, hogy az id-k nevéből kelljen kisajtolni egy számot, majd erre hivatkozni, stb... melós. Amúgy amikor azt az esetet veszem, amit a 3. pontban írtál, látszik, hogy a display block-ra állítva marad, csak a visibility változik. Mintha egyáltalán nem törlődne az időzítés a clearTimeout-nál.
(Megjegyzés, hogy szerintem az ilyen elnevezések, mint a var css; és ehhez hasonlók, nem túl szerencsések, mert könnyen megkavarhatják az embert hosszabb kódnál (lásd ugyanilyen nevű függvény is van jQuery-nél). Lehetne inkább var dt_display; vagy valami ilyesmi, csak ne hasonlítson foglalt nevekre.)
Egyébként elméletileg nem lenne szükség az each() függvényre, ahogy ugye itt a slideUp() függvénynél is sok div-et tüntet el egyszerű $("div").slideUp(); segítségével (ciklikusan végigmegy az összes egyező elemen).

Igazából nem is kéne if-ekkel vizsgálgatni, miután végighaladtál ciklussal az összes elemen, hogy meg van-e jelenítve, ahogy most csinálod ( if(css == "block") ), hanem kattintáskor
1.) törölni az összes beállított timeout-ot
2.) egyszerűen a kérdőjelre való kattintásra vonatkozó (click) tulajdonságra rákötni, hogy az összes súgót tartalmazó elemet (nálad dt-t) slideUp-olja - még akkor is, ha egyetlen egy elem sincs megjelenítve, ez úgyis annyira gyorsan történik, hogy itt rohadtul nem számít, hogy végigvizsgálgattad-e egyesével; sőt, ezt megteszi helyetted a jQuery! Nyilván ha meg van jelenítve, akkor animálva eltünteti, a display-t a végén none-ra állítva, ha nincs, megy tovább a következő talált elemre.
3.) az adott elem melletti súgót tartalmazó elemet (buborékszerűséget) megjeleníteni slideDown-nal (vagy ahogy épp meg akarod jeleníteni a súgót)
4.) beállítani a setTimeOut-ot a kívánt időmennyiségre, aminek a végén slideUp-olod a súgót, hogy eltűnjön.

Szóval szerintem bőven lehetne egyszerűsíteni a kódon.

[ Szerkesztve ]

üzenetek