clearInternval nie działa

clearInternval nie działa
Krzysztof Pe
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 3 lata
  • Postów:78
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

Silv
Moderator Wiki
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
0

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


AQ
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:23
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.

Krzysztof Pe
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 3 lata
  • Postów:78
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.

Silv
Moderator Wiki
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
0

Nie bardzo rozumiem: skoro robisz

Kopiuj
clearInterval(t);

to czemu potem robisz

Kopiuj
clearInterval(flashing);

?


edytowany 1x, ostatnio: Silv
Freja Draco
Freja Draco
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
0

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


Silv
Dodam, że w warunku if wchodzi do części z funkcją clearInterval.
Freja Draco
Freja Draco
Dobra, to niech jeszcze sobie sprawdzi, czy może nie wywołuje tego setInterval kilkukrotnie, bo wtedy t stałby się uchwytem tylko do ostatnio odpalonego zdarzenia, a wcześniejsze stają się niewylączalne. I nie mam więcej koncepcji.
Silv
Celna uwaga.
Krzysztof Pe
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 3 lata
  • Postów:78
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);
            }
        }
    });
edytowany 4x, ostatnio: Krzysztof Pe
Silv
@Krzysztof Pe: Możesz oznaczyć własną odpowiedź jako zaakceptowaną.
Freja Draco
Freja Draco
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
0

Na czym zatem polegał problem?


Krzysztof Pe
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 3 lata
  • Postów:78
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

Freja Draco
Freja Draco
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
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.


Silv
Znając JS, wstrzymałbym się ze stwierdzeniem, że na pewno masz rację, ale rzeczywiście coś w tym jest.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)