clearInternval nie działa

0

Witam,

Mam problem z wyczyszczeniem intervalu

    $("#ddlFlash").change(function () {
        var color = ($("#ddlColor :selected").text());
        var selected = ($("#ddlPosition :selected").text());
        var flash = ($("#ddlFlash :selected").text());

        var t = null;


        function flashing() {
            var flashingModule = $("#display").children();
            flashingModule.eq(selected - 1).animate({ opacity: 0.5 }, 500);
            flashingModule.eq(selected - 1).animate({ opacity: 1 }, 500);
        }

        if (color == "red") {
            if (flash == "yes") {
                t = setInterval(flashing, 500);
            }
            else {
                clearInterval(t);
                clearInterval(flashing);
            }
        }
    });

Jeśli trzeba to załącze cały plik.

Pozdrawiam

0

Opisz dokładniej, co to znaczy "mam problem". W jaki sposób objawia się to, że funkcja clearInterval nie działa?

0

Użyj console.log/debugger, sprawdź jaką masz wartość zmiennej t w momencie kiedy próbujesz zatrzymać interwał i przeanalizuj co się po kolei dzieje. Nie możesz deklarować zmiennej t wewnątrz funkcji $("#ddlFlash").change(function () {, bo musisz przechować jej wartość pomiędzy kolejnymi wywołaniami.

0

W momencie kiedy użytkownik przełącza ddl na yes element zaczyna migać i jest to rozwiązane funkcją setInterval natomiast w momencie kiedy użytkownik wybiera no w ddl element powinien przestać migać co chciałem zrealizować funkcją clearInterval. Niestety element ciągle miga. Dodam, że w warunku if wchodzi do części z funkcją clearInterval.

0

Nie bardzo rozumiem: skoro robisz

clearInterval(t);

to czemu potem robisz

clearInterval(flashing);

?

0

Przede wszystkim sprawdź sobie, czy ten kawałek po else w ogóle się wykonuje.

2

@Silv
Jedno jest niepotrzebne, ale nie umiem tego wyłączyć, więc próbowałem na chybił trafił.

@Freja Draco
Nie wywołuję się kilkukrotnie, ale myślę, że to ja coś źle zrobiłem.

@Aqu
Również dziękuję

Pozdrawiam

EDIT.
Naprawione, a tutaj jest rozwiązanie:

    var t;

    $("#ddlFlash").change(function () {
        var color = ($("#ddlColor :selected").text());
        var selected = ($("#ddlPosition :selected").text());
        var flash = ($("#ddlFlash :selected").text());

        function flashing() {
            var flashingModule = $("#display").children();
            flashingModule.eq(selected - 1).animate({ opacity: 0.5 }, 500);
            flashingModule.eq(selected - 1).animate({ opacity: 1 }, 500);
        }

        if (color != "original") {
            if (flash != "yes") {
                clearInterval(t);
            }
            else {
                t = setInterval(flashing, 1000);
            }
        }
    });
0

Na czym zatem polegał problem?

0

Pewien nie jestem, bo dopiero zaczynam swoją przygodę z Javascriptem, ale według mnie zmienna t była zadeklarowana w złym scopie. Za każdym razem przy zmianie wartości w ddl tworzyło nowy interval, a usuwało tylko ostatni stworzony co powodowało, że zawsze przynajmniej jeden działał. Teraz tworzy interval w zmiennej wyjętej poza funkcję i albo to nadpisuje albo usuwa.

Pozdrawiam

1
Krzysztof Pe napisał(a):

Za każdym razem przy zmianie wartości w ddl tworzyło nowy interval, a usuwało tylko ostatni stworzony co powodowało, że zawsze przynajmniej jeden działał.

Ha! No tak.
var zmienna wewnątrz funkcji tworzy zmienną lokalną i ta zmienna po zakończeniu funkcji przestaje istnieć, a my tu ślepaki jesteśmy :)
W takim razie możesz zostawić deklarację zmiennej wewnątrz funkcji, tylko nie stawiać przed nią var.

1 użytkowników online, w tym zalogowanych: 0, gości: 1