Autor | Zpráva | ||
---|---|---|---|
hexcross.. Profil * |
#1 · Zasláno: 7. 8. 2011, 20:52:20
zdravím,
nevíte proč mi nefunguje tato část kódu? Popis : při kliknutí na link se nadřazený div zvětší, potom by se pomocí stejného linku měl zmenšit. Pokud nastavim classy v HTML ručně funguje to, ale Javascript to poté nějak "neodchytává". HTML : <div class="note"> <a class="zoom closed" href="#" title="Zvětšit"> </a> </div> JS : $(document).ready(function(){ $(".zoom.closed").bind("click", function() { $(this).removeClass("closed"); $(this).addClass("opened"); $(this).parent().animate({ width: "300px", height: "300px" }, 500 ); }); $(".zoom.opened").bind("click", function() { $(this).removeClass("opened"); $(this).addClass("closed"); $(this).parent().animate({ width: "100px", height: "100px" }, 500 ); }); }); |
||
Chamurappi Profil |
#2 · Zasláno: 8. 8. 2011, 02:25:45
Reaguji na hexcross..:
Proč by měla fungovat? Příkazy jQuery přeci nejsou CSS, selektory se nevyhodnocují dynamicky. Funkcí $ po načtení stránky vyhledáš element (takový, který v tu dobu odpovídá selektoru) a nastavíš mu akci při kliknutí. Pokud mu třídu změníš, má pořád přiřazenu stejnou akci při kliknutí…
|
||
hexcross.. Profil * |
#3 · Zasláno: 8. 8. 2011, 10:03:35
Chamurappi:
Díky, myslel jsem si to...jen plácnu řešením by mohla být funkce toogle |
||
pcmanik Profil |
#4 · Zasláno: 8. 8. 2011, 10:04:02
hexcross..:
Len poznamka, skus si pozriet nieco o vetveni prikazov v jQuery napr. toto $(this).removeClass("opened"); $(this).addClass("closed"); $(this).removeClass("opened").addClass("closed"); Ale ak stale trvas na prehnanom pouzivani this, tak si to aspon uloz do nejakej premennej. Ked to takto pouzijes vela krat v kode zbytocne vytvaras jQuery objekt. |
||
hexcross.. Profil * |
#5 · Zasláno: 8. 8. 2011, 12:08:30
pcmanik:
Ok mrknu na to. S jQuery zatím začínám tak proto vznikají takové věci co vznikají :) Jinak sem to vyřešil takto : $(".zoom").bind("click", function() { if($(".zoom").hasClass("open")) { $(this).parent().animate({ width: "150px", height: "150px" }, 500 ); $(this).removeClass("open"); $(this).parent().removeClass("open"); } else { $(this).addClass("open"); $(this).parent().addClass("open"); $(this).parent().animate({ width: "300px", height: "300px" }, 500 ); } }); |
||
hexcross.. Profil * |
#6 · Zasláno: 8. 8. 2011, 12:10:14
Ještě něco vlastně...
Potřebuju dát timeout pro přidání classy v podmínce if($(".zoom").hasClass("open")) Skoušel jsem delay, queue ale neúspěšně...bude to banalita ale byl bych rád kdyby ste mi ušetřili čas :) |
||
_es Profil |
#7 · Zasláno: 8. 8. 2011, 12:20:54
|
||
hexcross.. Profil * |
#8 · Zasláno: 8. 8. 2011, 12:24:40
_es:
„setTimeout“ V jQuery na to funkce není? |
||
_es Profil |
#9 · Zasláno: 8. 8. 2011, 12:31:15
hexcross..:
„V jQuery na to funkce není?“ A na hentej sa ti čo nepáči? JQuery nie je programovací jazyk. |
||
hexcross.. Profil * |
#10 · Zasláno: 8. 8. 2011, 12:41:25
_es:
„JQuery nie je programovací jazyk.“ Vim, vim jen jestli by místo function delayedAlert() { timeoutID = window.setTimeout(slowAlert, 2000); } Nešlo použít něco jako : $(this).delay(2000).removeClass("open"); Což uznej sám vypadá líp :) |
||
Chamurappi Profil |
#11 · Zasláno: 8. 8. 2011, 12:51:01
Reaguji na hexcross..:
„Což uznej sám vypadá líp :)“ Nevypadá, logicky nedává smysl volat metodu delay na elementu, takové zřetězení je nepřirozené. Časovač je událost, ne sleep .
„S jQuery zatím začínám“ Možná bys měl začít napřed se základy JavaScriptu, aby ti nepřipadaly divné konstrukce hezké a nefunkční nevysvětlitelně nefunkční. |
||
_es Profil |
#12 · Zasláno: 8. 8. 2011, 13:00:17
hexcross..:
Mne sa niekedy zdá, že rýchlokvasení programátori „v jQuery“ očakávajú, že je v jQuery funkcia úplne na všetko. A ak je čo len jeden príkaz v kóde bez dolára tak sa cítia neisto. Na čo by do tej knižnice dávali časovače, ak vo všetkých prehliadačoch bez problémov s rovnakou syntaxou fungujú? Identifikátor časovača ukladať v tvojom prípade nepotrebuješ, teda ti stačí jednoduchý príkaz: setTimeout(slowAlert, 2000); |
||
hexcross.. Profil * |
#13 · Zasláno: 8. 8. 2011, 13:22:02
_es:
„Mne sa niekedy zdá, že rýchlokvasení programátori ‚v jQuery‘ očakávajú, že je v jQuery funkcia úplne na všetko. A ak je čo len jeden príkaz v kóde bez dolára tak sa cítia neisto. Na čo by do tej knižnice dávali časovače, ak vo všetkých prehliadačoch bez problémov s rovnakou syntaxou fungujú?“ Neočekávám nic, zkouším a hledám řešení, jinak ano pro většinu věcí co jsem chtěl jQuery funkce byla... Identifikátor časovača ukladať v tvojom prípade nepotrebuješ, teda ti stačí jednoduchý príkaz: setTimeout(slowAlert, 2000); Tohle mi tam nehodilo ani alert, jen to pokazilo script co jsem měl... |
||
hexcross.. Profil * |
#14 · Zasláno: 8. 8. 2011, 13:30:20
Abrakadabra, jQuery funkce se objevila :
$(this).removeClass("open").delay(500).queue(function(next){ $(this).parent().removeClass("open"); next(); }); Funkční, jednoduchý, tak jsem to chtěl. |
||
_es Profil |
#15 · Zasláno: 8. 8. 2011, 13:52:46
hexcross..:
„Tohle mi tam nehodilo ani alert“ Samozrejme showAlert musí byť funkcia. „jednoduchý“ No, keď myslíš, to musí byť radosť pracovať s takým kódom. Ani v jQuery dokumentácii sa nerozpakujú použiť setTimeout, aby si si nemyslel, že to je niečo nejQueryovité. |
||
Chamurappi Profil |
#16 · Zasláno: 8. 8. 2011, 14:31:06
Reaguji na hexcross..:
„Funkční, jednoduchý, tak jsem to chtěl.“ A hloupý. Využíváš metody určené ke zřetězení animací. |
||
hexcross.. Profil * |
#17 · Zasláno: 8. 8. 2011, 14:44:51
Chamurappi:
„A hloupý. Využíváš metody určené ke zřetězení animací.“ Souhlasím, je to tak...jinak se mi to nepovedlo... Podobná funkce stejný problém, proč mi teďka nejde setTimeout ? function delete_note() { $(".delete").bind("click", function() { $(this).parent().animate({opacity: 0}, 500 ); setTimeout(function () { $(this).parent().remove(); }, 5000); }); } Nejdřív animace, potom se element vymaže. |
||
_es Profil |
#18 · Zasláno: 8. 8. 2011, 14:52:14
hexcross..:
„proč mi teďka nejde setTimeout ?“ Pretože this je v čase zavolania tej funkcie iné, musíš si ten objekt uložiť do nejakej premennej. |
||
hexcross.. Profil * |
#19 · Zasláno: 8. 8. 2011, 15:47:20
_es:
„Pretože this je v čase zavolania tej funkcie iné, musíš si ten objekt uložiť do nejakej premennej.“ Díky. Funkční : function delete_note() { $(".delete").bind("click", function() { var promenna = $(this); $(promenna).parent().animate({opacity: 0}, 500 ); setTimeout(function () { $(promenna).parent().remove(); }, 1000); }); } |
||
_es Profil |
#20 · Zasláno: 8. 8. 2011, 15:55:06
hexcross..:
„$(promenna)“ V premennej promenna už máš jQuery objekt, nepotrebuješ používať $(promenna).parent(), stačí promenna.parent(), alebo si do premennej ulož už rovno $(this).parent(), keď potrebuješ len ten objekt. |
||
hexcross.. Profil * |
#21 · Zasláno: 8. 8. 2011, 16:28:31
_es:
„V premennej promenna už máš jQuery objekt, nepotrebuješ používať $(promenna).parent(), stačí promenna.parent(), alebo si do premennej ulož už rovno $(this).parent(), keď potrebuješ len ten objekt.“ Pravda, pravda...díky ;) |
||
pcmanik Profil |
#22 · Zasláno: 8. 8. 2011, 20:20:00
hexcross..:
Videotutorialy pre jQuery, mohli by sa ti hodit. (Myslim ze by sa mohli pridat aj do miestneho FAQ, ale nechcem robit reklamu.) |
||
Časová prodleva: 13 let
|
0