Brak akcji po setTimeout () w jquery


(Aglasek) #1

Witam,

Możecie mi wyjaśnić dlaczego po funkcji setTimeout(animacja(),2000); nie wykonuje się żadna akcja a dokładniej chodzi mi o to aby po kliknięciu na link np. costam najpierw wykonał sie skrypt w jquery a potem aby przeszło do adresu.Więc zamieniłem atrybut href na "name" i pobieram go do zmiennej attr_name i po animacji chcę aby przeszło do adresu. Animacja się wykonuje ale do adresu już nie przychodzi mimo ze pobiera go prawidłowo, wogóle nawet jak dam prostego alerta po setTimeout to sie nie wywoła, dlaczego? Jak to zrobić?

$(document).ready(function() {


    $("#menu2 li").click(function(){

     var attr_name = $(this).find('a').attr('name');

    setTimeout( animacja(), 2000 );

    location.href =attr_name;


   });


function animacja(){

     $(".left_column").animate({'width':'0px'});

}

});

(slepciu) #2

Ten kod nie ma prawa działać.

  1. Nazwa funkcji w metodzie setTimeout musi być podana w cudzysłowach

  2. Sama funkcja powinna być zdefiniowana poza $(document).ready(function() {}

  3. No i chyba najważniejsze, nawet jak poprawisz powyższe to kod i tak nie będzie działał, ponieważ po przerwie zostanie wywołana funkcja animate(), ale natychmiast po niej zostanie wywołane przekierowanie, więc nie zobaczysz animacji, bo nie zdąży się wykonać

Moja rada:

Metoda JQuery animate() pozwala na wywołanie funkcji po wykonaniu się animacji, trzeba ją podać jako ostatni argument, a w metodzie setTimeout można zamiast nazwy funkcji skorzystać z funkcji anonimowej. Dzięki temu możemy skorzystać z kodu:

$(document).ready(function() {

    $("#menu2 li").click(function(){

     var attr_name = $(this).find('a').attr('name');

    setTimeout( function(){

        $(".left_column").animate({'width':'0px'},function(){location.href =attr_name});

    }, 2000 );

});

To chyba powinno zadziałać tak jak chciałeś