Autor | Zpráva | ||
---|---|---|---|
8vm8 Profil |
Zdravím, momentálně vytvářím v javascriptu a jquery efekty na odkazy. Odkazy jsou umístěny v divu. Když se kurzor v tomto divu nachází, přidá se mu třída active. Chci, aby se mi při přejetí přez odkaz spustil efekt jen na těch odkazech, které jsou v divu se třídou active. Když třídu tomuto divu přidá javascript při přejetí kurzorem, tak se script chová, jakoby $(".active .linkEffect") neexistoval. Pokud třídu active připíšu nějakému divu ručně, a refreshuju stránku, tak mi skript funguje normálně. Nenapadá někoho proč tomu tak je? Dík za odpověď.
|
||
juriad Profil |
Já myslím, že bude chyba v přidávání té třídy k divu.
Ale jelikož se mi křišťálová koule právě porouchala, nepovím ti, kde přesně je. |
||
_es Profil |
8vm8:
„tak se script chová“ Aký skript? Ako to máme vyveštiť? Zrejme nastavuješ tie efekty pre vtedy práve existujúce prvky s daným atribútom class . A zmena class neskôr nič nerobí, lebo nejde o CSS, ale o JS.
|
||
8vm8 Profil |
Tady je část kódu. Když tu třídu místo skriptu přidám já, tak kód funguje správně.
$(".effectsDiv").hover(function(){ $(this).addClass("active"); }, function () { $(this).removeClass("active"); } ); $(".active .linkEffect").hover(function () { $(this).animate({"width":4+"%"},300); }, function () { $(this).animate({"width":3+"%"},300); }); |
||
juriad Profil |
#5 · Zasláno: 9. 7. 2013, 15:07:02
8vm8:
Aha, takže nečteš dokumentaci jQuery. Funkce $ bere jako svůj parametr selector a vrací množinu elementů, které mu vyhovují. Metoda hover zaregistruje každému elementu množiny, nad kterou je zavolaný, posluchače události hover. V době, kdy se provádí 9. řádek bude tato množina prázdná a co se bude dít o několik sekund později je jí buřt. Řešením by bylo přidat hover všem effectsDivům: $(".effectsDiv .linkEffect").hover(function () { if($(this).parents('.active').length == 0) { # pokud nemá předka s třidou active return; # nemá být efekt proveden } $(this).animate({"width":4+"%"},300); }, function () { $(this).animate({"width":3+"%"},300); }); |
||
8vm8 Profil |
Tak jsem to vyřešil. Nevím, jestli je to nejlepší řešení ale funguje to. Udělal jsem to nakonec takhle:
$(".effectsDiv").hover(function(){ $(this).addClass("active"); $(".active .linkEffect").hover(function () { $(this).animate({"width":4+"%"},300); }, function () { $(this).animate({"width":3+"%"},300); } ); }, function () { $(this).removeClass("active"); } ); |
||
joe Profil |
#7 · Zasláno: 10. 7. 2013, 20:21:19
8vm8:
Funguje to špatně, při každém najetí na element s třídou effectsDiv budeš přidávat funkci elementům vyhovující .active .linkEffect , která se vykoná při najetí na ně.
Proč jsi raději nepoužil třeba to, co psal juriad? |
||
8vm8 Profil |
#8 · Zasláno: 12. 7. 2013, 13:09:46
Já to zkusil použít ale nefungovalo mě to. Tak jsem to zkusil tak, jak jsem psal.
|
||
Časová prodleva: 12 let
|
0