Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Js] czekanie az petla sie skonczy
blokern
post 2.03.2021, 17:21:38
Post #1





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 27.02.2008

Ostrzeżenie: (0%)
-----


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?


--------------------
www.Opiekuj.pl
Go to the top of the page
+Quote Post
LowiczakPL
post 2.03.2021, 19:39:13
Post #2





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


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ć.


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
blokern
post 2.03.2021, 20:14:09
Post #3





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 27.02.2008

Ostrzeżenie: (0%)
-----


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()


--------------------
www.Opiekuj.pl
Go to the top of the page
+Quote Post
trueblue
post 3.03.2021, 07:33:01
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A co się dzieje po usunięciu pętli?
Ile jest elementów apartamenty i gdzie inicjujesz tą zmienną?


--------------------
Go to the top of the page
+Quote Post
blokern
post 3.03.2021, 11:28:47
Post #5





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 27.02.2008

Ostrzeżenie: (0%)
-----


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?


--------------------
www.Opiekuj.pl
Go to the top of the page
+Quote Post
trueblue
post 3.03.2021, 11:46:50
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Spróbuj owinąć pętlę w:

  1. setTimeout(function(){
  2.  
  3. ...pętla
  4.  
  5. }, 10);


--------------------
Go to the top of the page
+Quote Post
LowiczakPL
post 7.03.2021, 07:41:44
Post #7





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


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);


Ten post edytował LowiczakPL 7.03.2021, 07:38:29


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 18:04