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
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
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
Já to zkusil použít ale nefungovalo mě to. Tak jsem to zkusil tak, jak jsem psal.

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: