Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Js] czekanie az petla sie skonczy
Forum PHP.pl > Forum > Po stronie przeglądarki
blokern
Hejka mam taki kod

  1. $(document).ready(function(){
  2. $(".filtr").click(function(){
  3. //$(".preloader").css("display", "block");
  4. var data = $(this).attr("name");
  5. $(this).addClass("check");
  6. apartamenty.forEach(
  7. function(id) {
  8. var kalendarz = $("div[name="+id+"]").attr(data);
  9. if($("div[name="+id+"]").is(':visible'))
  10. {
  11. if(kalendarz==0){
  12. $("div[name="+id+"]").hide();
  13. }
  14. }else{
  15. $("div[name="+id+"]").show();
  16. }
  17. });
  18. });
  19. });


dlaczego to
  1. $(this).addClass("check");

wykonuje sie dopiero jak skonczy wykonywac sie to
  1. apartamenty.forEach


i jak moge spowodowac zeby addClass nie czekal na koniec petli?
LowiczakPL
Na pewno wykonuje się od razu jak klikasz w filtr, nie czeka na koniec pętli o którym piszesz.
Ta linia kodu wykonuje się zanim pętla się zacznie wykonywać.
blokern
Jednak jest inaczej i wynik w przeglądarce widzę dopiero po wykonaniu tej pętli.czytalem o asynchronicznym ladowaniu się kodu, że może tutaj leży problem. Console.log kiedy dam w tym samym miejscu co linijka z addclass wyświetla tekst który sobie wpisze ale z akcjami typu DOM chyba jest inaczej? Mądrze się a nie wiem ale tak czy siak nie wykonuje się jedno po drugim tylko czeka skrypt aż skończy mielić fotelach w funkcji
$(".filtr").click(function()
trueblue
A co się dzieje po usunięciu pętli?
Ile jest elementów apartamenty i gdzie inicjujesz tą zmienną?
blokern
jak usune petle to leci z wykonywaniem po kolei. wlasciwie to nie widac przez chwile preloader bo jest show i hide po sobie
210 apartamentow

a jeszcze mam pytanie o to
apartamenty.forEach(function(id) {})

wyswietli jak skonczy sie petla a czy da sie wyswietlac w trakcie wykonywania petli?
trueblue
Spróbuj owinąć pętlę w:

  1. setTimeout(function(){
  2.  
  3. ...pętla
  4.  
  5. }, 10);
LowiczakPL
Cytat(blokern @ 3.03.2021, 11:28:47 ) *
jak usune petle to leci z wykonywaniem po kolei. wlasciwie to nie widac przez chwile preloader bo jest show i hide po sobie
210 apartamentow

a jeszcze mam pytanie o to
apartamenty.forEach(function(id) {})

wyswietli jak skonczy sie petla a czy da sie wyswietlac w trakcie wykonywania pętli?


ten kod nie jest napisany tak aby czekał jak skończy się pętla, ten kod modyfikuje DOM w każdym przebiegu pętli, dzieje się to po prostu tak szybko że nie zauważasz tego, aby to sprawdzić wystarczy dać pauzę KILKA sekund opóźnienia na końcu pętli (nie znaczy to poza pętla ale przed jej zakończeniem) a przekonasz się że tek kod przed pętlą o który pytałeś wcześniej wykonuje się najpierw i że każda linia wykonuje się na stronie jedna po drugiej nie czekając na koniec pętli.

funkcja opóźniająca

Kod
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}


użycie funkcji aby opóźniać wykonywanie pętli w mili sekundach, 1 sekunda to 1000 mili sekund, poniżej to 2 sekundy

Kod
await sleep(2000);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.