Autor Zpráva
hexcross..
Profil *
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
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 *
Chamurappi:
Díky, myslel jsem si to...jen plácnu řešením by mohla být funkce
toogle
?
pcmanik
Profil
hexcross..:
Len poznamka, skus si pozriet nieco o vetveni prikazov v jQuery napr. toto
$(this).removeClass("opened");
  $(this).addClass("closed");  
mozes zapisat ako
$(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 *
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 *
Ještě něco vlastně...

Potřebuju dát timeout pro přidání classy v podmínce
 if($(".zoom").hasClass("open"))
nevíte jak?

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
hexcross..:
Potřebuju dát timeout
setTimeout
hexcross..
Profil *
_es:
setTimeout
V jQuery na to funkce není?
_es
Profil
hexcross..:
V jQuery na to funkce není?
A na hentej sa ti čo nepáči?
JQuery nie je programovací jazyk.
hexcross..
Profil *
_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
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
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 *
_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 *
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
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
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 *
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
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 *
_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
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 *
_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
hexcross..:
Videotutorialy pre jQuery, mohli by sa ti hodit. (Myslim ze by sa mohli pridat aj do miestneho FAQ, ale nechcem robit reklamu.)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0