| 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: 14 let
|
|||
0