• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pętla nie pozwala załadować strony

Object Storage Arubacloud
0 głosów
396 wizyt
pytanie zadane 17 stycznia 2023 w JavaScript przez pj-1024 Użytkownik (670 p.)

Dzień dobry.

Robię skrypt w JS, który ma odczytać wartość z inputa i wsawić to do diva. Gdy w skrypcie zrobię nieskończoną pętlę ("while (true)") - Strona w nieskończoność się ładuje. Czekałem kilka minut i nic. Poniżej podaje kod skryptu.

while (true){
	function update() {
		document.getElementById('div').innerHTML = document.getElementById('text-to-display').value();;
	}
}
<input type="text" id="text-to-display" placeholder="Text to display">
<div id="div"></div>

 

komentarz 17 stycznia 2023 przez pablop76 VIP (123,180 p.)
Czego się spodziewasz po niekończonej pętli?  JS jest domyślnie synchroniczny więc dopóki nie wykona się funkcja nic dalej się nie wydarzy.
komentarz 17 stycznia 2023 przez pj-1024 Użytkownik (670 p.)
W takim razie jak to zrobić? Żaden element się nie pojawia mimo to, że skrypt jest ładowany poniżej kodu.

1 odpowiedź

+1 głos
odpowiedź 17 stycznia 2023 przez Gynvael Coldwind Nałogowiec (27,530 p.)
wybrane 17 stycznia 2023 przez pj-1024
 
Najlepsza

W skrócie: JS ma inny model wykonania niż języki typu Python czy C++, i w JS nieskończone pętle nie mają racji bytu.

W JS skrypt wykonuje się jako zestaw krótkich (w rozumieniu czasu wykonania) zadań (tasków), które pośrednio lub bezpośrednio kolejkują kolejne zadania. I te zadania są wykonywane jedno po drugim w kolejności zakolejkowania.  Vide https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop

Pomiędzy tymi zadaniami strona może być przerysowywana / jest czas na interakcje ze strony użytkownika / etc. Jeśli którekolwiek zadanie ma nieskończoną pętlę, to cała kolejka staje, strona nigdy się nie przerysuje, a zdarzenia ze strony użytkownika nigdy nie spowodują wykonania kolejnych zadań.

Czyli, nie możesz użyć nieskończonej pętli ;)

Zamiast tego musisz zarejestrować jakąś funkcje, która będzie dodana jako zadanie w momencie interakcji z <input> który tam masz, co robi się mniej więcej tak:

const divEl = document.getElementById('div');
const inputEl = document.getElementById('text-to-display');

function update() {
  divEl.innerText = inputEl.value;
}

// W przypadku zmiany, dodaj zadanie wywołania funkcji update.
inputEl.addEventListener('input', update);

P.S. Nigdy nie używaj innerHTML – to tylko powoduje błędy bezpieczeństwa (XSS) i jest prawie nigdy niepotrzebne. Zamiast tego innerText albo, jeśli trzeba, wchodzący dopiero setHTML. Jest kilka przypadków kiedy innerHTML jest potrzebny, ale wtedy trzeba całość przeanalizować pod kątem bezpieczeństwa i świadomie (i prawidłowo) tego użyć ;)

komentarz 17 stycznia 2023 przez Gynvael Coldwind Nałogowiec (27,530 p.)
P.S.2. Tutaj jest więcej info o tym zdarzeniu "input":

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event

Podobne pytania

+1 głos
3 odpowiedzi 753 wizyt
pytanie zadane 14 września 2015 w JavaScript przez fgrzesiek Nowicjusz (160 p.)
+1 głos
3 odpowiedzi 514 wizyt
pytanie zadane 29 sierpnia 2021 w JavaScript przez ShockWave Bywalec (2,350 p.)
0 głosów
2 odpowiedzi 241 wizyt
pytanie zadane 14 września 2015 w JavaScript przez makoso Mądrala (7,380 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...