Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pętla i wyprowadzenie wartości licznika pętli na ekran
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Arcadius
Witam

W przypadku takiej pętli:

Kod
for (n = 0; n < 50000; ++n)
{
    var str = Math.floor(Math.random()*268435455).toString(16);
    document.write(str + "<br />");
}


Chciałem wyprowadzić wartość "n" na ekran w trakcie wykonywania się pętli, podpowie mi ktoś?
kamil4u
Ostatnio straszni się lenistwo na form rozbestwiło smile.gif
Dlaczego nie przeczytasz pierwszego lepszego kursu JS i nie zrobisz tego sam?

Popatrz:
1.
Kod
for (n = 0; n < 50000; ++n)
to jest pętla - tak popularna, że w Google znajdziesz wszystko dokładnie opisane setki razy
2.
Kod
var str = Math.floor(Math.random()*268435455).toString(16);
To jest przypisanie do zmiennej jakieś wartości - Ciebie w tym problemie nawet nie interesuje jaka to wartość
3.
Kod
document.write(str + "<br />");
Tu cała zagadka smile.gif

Jak byś poświęcił 1min Twojego cennego czasu to byś wiedział, że ta linia wyświetla coś na ekran. Już wiesz, że w pętli nadawana jest zmiennej "str" jakaś wartość. Jak łatwo się domyślić w tym miejscu ją wyświetlasz. Dodatkowo jest jakieś dziwne "<br>" to HTML - też po przeczytaniu kursu byś wiedział. Teraz zadanie do Ciebie domyślić się co masz zrobić, a ja daję Ci podpowiedź - jak sam prosiłeś:
Cytat
podpowie mi ktoś?



Kod
<script>

var testowaZmienna = 5;
alert( testowaZmienna );
alert( testowaZmienna + " a tu jakiś napis");
var testowaZmienna2 = 6;
alert( testowaZmienna + " jakiś napis i obok druga zmienna " + testowaZmienna2 );
document.write("Tu wyświetlamy na ekran");

</script>

Teraz już wystarczy trochę pomyśleć i ew. przeczytać kurs.
Powodzenia!
Arcadius
Super, że poświęciłeś swój czas, ale uważam że sam go marnotrawisz. Na 100% informacji jaką przekazałeś 90% to twoje wywody.
A skąd Ty tak dobrze wiesz ile czasu poświęciłem na poszukanie rozwiązania?

Czemu maja służyć jakieś docinki?
Czy ja zadałem pytanie na temat funkcjonowania pętli?
A może przypisywanie do zmiennej wartości?

Jakoś sobie nie przypominam.

Dlaczego zawsze tak jest, że nie obędzie się bez złośliwości?
Nie potrafisz się zachować przyjaźnie jak normalny człowiek?
Takie to trudne czy to cecha wrodzona większości polaków?

Dlaczego zakładasz, że ktoś idzie na łatwiznę? A może faktycznie nie potrafiłem sobie z tym poradzić nawet przy pomocy wujka googla?

Czy Ty sam byś chciał żeby Cię tak ktoś traktował?
Wyobraź sobie, że jesteś w obcym mieście szukasz ulicy, a ludzie Ci odpowiadają "kup sobie pan nawigację", albo "kup sobie pan mapę".

Troszkę to chamskie, nie sądzisz?


Cytat(kamil4u @ 30.08.2012, 21:07:00 ) *
Ostatnio straszni się lenistwo na form rozbestwiło smile.gif
Dlaczego nie przeczytasz pierwszego lepszego kursu JS i nie zrobisz tego sam?

Popatrz:
1.
Kod
for (n = 0; n < 50000; ++n)
to jest pętla - tak popularna, że w Google znajdziesz wszystko dokładnie opisane setki razy
2.
Kod
var str = Math.floor(Math.random()*268435455).toString(16);
To jest przypisanie do zmiennej jakieś wartości - Ciebie w tym problemie nawet nie interesuje jaka to wartość
3.
Kod
document.write(str + "<br />");
Tu cała zagadka smile.gif

Jak byś poświęcił 1min Twojego cennego czasu to byś wiedział, że ta linia wyświetla coś na ekran. Już wiesz, że w pętli nadawana jest zmiennej "str" jakaś wartość. Jak łatwo się domyślić w tym miejscu ją wyświetlasz. Dodatkowo jest jakieś dziwne "<br>" to HTML - też po przeczytaniu kursu byś wiedział. Teraz zadanie do Ciebie domyślić się co masz zrobić, a ja daję Ci podpowiedź - jak sam prosiłeś:



Kod
<script>

var testowaZmienna = 5;
alert( testowaZmienna );
alert( testowaZmienna + " a tu jakiś napis");
var testowaZmienna2 = 6;
alert( testowaZmienna + " jakiś napis i obok druga zmienna " + testowaZmienna2 );
document.write("Tu wyświetlamy na ekran");

</script>

Teraz już wystarczy trochę pomyśleć i ew. przeczytać kurs.
Powodzenia!



P.S. Jak taki mądry jesteś, to wyświetl wartość licznika pętli dopóki się nie skończy smile.gif

Cytat(Arcadius @ 30.08.2012, 21:58:06 ) *
Super, że poświęciłeś swój czas, ale uważam że sam go marnotrawisz. Na 100% informacji jaką przekazałeś 90% to twoje wywody.
A skąd Ty tak dobrze wiesz ile czasu poświęciłem na poszukanie rozwiązania?

Czemu maja służyć jakieś docinki?
Czy ja zadałem pytanie na temat funkcjonowania pętli?
A może przypisywanie do zmiennej wartości?

Jakoś sobie nie przypominam.

Dlaczego zawsze tak jest, że nie obędzie się bez złośliwości?
Nie potrafisz się zachować przyjaźnie jak normalny człowiek?
Takie to trudne czy to cecha wrodzona większości polaków?

Dlaczego zakładasz, że ktoś idzie na łatwiznę? A może faktycznie nie potrafiłem sobie z tym poradzić nawet przy pomocy wujka googla?

Czy Ty sam byś chciał żeby Cię tak ktoś traktował?
Wyobraź sobie, że jesteś w obcym mieście szukasz ulicy, a ludzie Ci odpowiadają "kup sobie pan nawigację", albo "kup sobie pan mapę".

Troszkę to chamskie, nie sądzisz?

kamil4u
Cytat
Czemu maja służyć jakieś docinki?
Czy ja zadałem pytanie na temat funkcjonowania pętli?
A może przypisywanie do zmiennej wartości?

Nie - nie zadałeś, ale to jest ważne do rozwiązania problemu. Nie mogę wiedzieć na jakim jesteś poziomie, jeśli chodzi o JS, a nawet wiem po tym krótkim kodzie, że raczej w tym języku jesteś początkującym. Główny powód to document.write ,które praktycznie się już nie używa.

Cytat
Dlaczego zawsze tak jest, że nie obędzie się bez złośliwości?
Nie potrafisz się zachować przyjaźnie jak normalny człowiek?
Takie to trudne czy to cecha wrodzona większości polaków?

Jeśli już to Polaków. Jeśli nie szanujesz mnie to przynajmniej szanuj resztę naszego społeczeństwa. Teraz tak ogólnie( nie personalnie do Ciebie - o tym zaraz ) . Jeżeli zdarzy się ktoś kto nie poświęcił swojego czasu, a liczy od razu na gotowca( i to się zdarza klika razy dziennie ), to przyznasz, że po pewnym czasie staje się to dość irytujące.

Cytat
P.S. Jak taki mądry jesteś, to wyświetl wartość licznika pętli dopóki się nie skończy smile.gif

Teraz na reszcie zrozumiałem problem. Wcześniej myślałem, że chodzi Ci o samo dodanie zmiennej licznikowej, czyli
Kod
document.write(n+" -->" + str + "<br />");
, czyli łączenia zmiennych( operator + ). W takim wypadku myślę, że możesz mnie zrozumieć, że myślałem, że w ogóle nie poświęciłeś swojego czasu na rozwiązanie problemu, bo łączenie zmiennych jest na początku każdego kursu JS. Przepraszam. Ale na swoje usprawiedliwienie dodam, że dość marnie opisałeś swój problem. Następnym razem napisz dosadniej, co jest głównym problemem, bo czytając szybko kilkanaście postów, nie sposób skupić się nad każdym słowem smile.gif

Teraz odnośnie problemu:

Do końca się nie da. Problem polega na tym, że czas wyświetlenia czegoś na ekran trwa dość długo. Jeżeli chodzi Ci tylko o to, żeby nie muliło przeglądarki piszesz to wszystko bardziej profesjonalnie i trwa to około 3s i masz wszystko szybko wyświetlone:
Kod
<div id="test">
</div>

<script>
var parent = document.getElementById("test");
var el,str,n;

for (n = 0; n < 50000; ++n){
    str = Math.floor(Math.random()*268435455).toString(16);

    el = document.createTextNode(n +" --> "+ str);
    parent.appendChild( el );

    el = document.createElement('br');
    parent.appendChild( el );
}
</script>


Jeżeli jednak chcesz mieć taki efekt pojawienia się tego na ekranie to:
Kod
<div id="test">
</div>

<script>
var parent = document.getElementById("test");
var n = 0;
var el,str,n;

petla = setInterval( function(){
  if( n<5000 ){
    str = Math.floor(Math.random()*268435455).toString(16);

    el = document.createTextNode(n++ +" --> "+ str);
    parent.appendChild( el );

    el = document.createElement('br');
    parent.appendChild( el );
  } else {
   clearInterval( petla );
  }
}, 1 );

</script>


Ew. jak chcesz wszystko jeszcze szybciej to wyświetlaj to paczkami np. co 100 wpisów:
Kod
<div id="test">
</div>

<script>
var parent = document.getElementById("test");
var n = 1;
var el, el2, str,n;

petla = setInterval( function(){
  if( n<5000 ){
    el2 = document.createDocumentFragment();
    for(; (n%100 && n<5000); n++){
      str = Math.floor(Math.random()*268435455).toString(16);

      el = document.createTextNode(n++ +" --> "+ str);
      el2.appendChild( el );

      el = document.createElement('br');
      el2.appendChild( el );
    }
    parent.appendChild( el2 );
  } else {
   clearInterval( petla );
  }
}, 1 );

</script>



--edit--
Osobiście chyba bym zrobił coś na wzór tego, czyli wyświetlenie 100, a później dopiero całą resztę :
Kod
<div id="test">
</div>

<script>
var parent = document.getElementById("test");
var el, el2, str,n;

el2 = document.createDocumentFragment();
for (n = 0; n < 100; ++n){
    str = Math.floor(Math.random()*268435455).toString(16);

    el = document.createTextNode(n +" --> "+ str);
    el2.appendChild( el );

    el = document.createElement('br');
    el2.appendChild( el );
}

parent.appendChild( el2 );
el2 = document.createDocumentFragment();

setTimeout( function(){
for (; n < 50000; ++n){
    str = Math.floor(Math.random()*268435455).toString(16);

    el = document.createTextNode(n +" --> "+ str);
    el2.appendChild( el );

    el = document.createElement('br');
    el2.appendChild( el );
}
parent.appendChild( el2 );},
100);
</script>
Arcadius
Drogi Kamilu not 4 me smile.gif

Dużo napisałeś, chwała Ci, ale chyba nie czytałeś dokładnie mojego pytania w pierwszym poście. Specjalnie wstawiłem tylko fragment kodu i na dobrą sprawę mogłem zwrzeć w poście ten kod nawet tak:
Kod
for (n = 0; n < 50000; ++n)
{
    document.write(n + "<br />");
}


albo tak:

Kod
for (n = 0; n < 50000; ++n)


W swoich wszystkich postach nawet się nie otarłeś o problem smile.gif
A pytanie brzmiało : Chciałem wyprowadzić wartość "n" na ekran w trakcie wykonywania się pętli, podpowie mi ktoś?

Przepraszam, otarłeś się o problem, tym fragmentem kodu:

Kod
<div id="test">
</div>

<script>
var parent = document.getElementById("test");
var n = 0;
var el,str,n;

petla = setInterval( function(){
  if( n<5000 ){
    str = Math.floor(Math.random()*268435455).toString(16);

    el = document.createTextNode(n++ +" --> "+ str);
    parent.appendChild( el );

    el = document.createElement('br');
    parent.appendChild( el );
  } else {
   clearInterval( petla );
  }
}, 1 );


Jednak zapomniałeś, że mówimy o pętli "for"!

"Uprzejmości" nie będę z Tobą wymieniał, bo to nie miejsce na to, odniosę się tylko do szacunku, przykładem jego braku jest twoja piersza odpowiedź.

Skupmy się więc na kodzie i problemie smile.gif

Cytat(kamil4u @ 30.08.2012, 23:03:01 ) *
Nie - nie zadałeś, ale to jest ważne do rozwiązania problemu. Nie mogę wiedzieć na jakim jesteś poziomie, jeśli chodzi o JS, a nawet wiem po tym krótkim kodzie, że raczej w tym języku jesteś początkującym. Główny powód to document.write ,które praktycznie się już nie używa.


Jeśli już to Polaków. Jeśli nie szanujesz mnie to przynajmniej szanuj resztę naszego społeczeństwa. Teraz tak ogólnie( nie personalnie do Ciebie - o tym zaraz ) . Jeżeli zdarzy się ktoś kto nie poświęcił swojego czasu, a liczy od razu na gotowca( i to się zdarza klika razy dziennie ), to przyznasz, że po pewnym czasie staje się to dość irytujące.


Teraz na reszcie zrozumiałem problem. Wcześniej myślałem, że chodzi Ci o samo dodanie zmiennej licznikowej, czyli
Kod
document.write(n+" -->" + str + "<br />");
, czyli łączenia zmiennych( operator + ). W takim wypadku myślę, że możesz mnie zrozumieć, że myślałem, że w ogóle nie poświęciłeś swojego czasu na rozwiązanie problemu, bo łączenie zmiennych jest na początku każdego kursu JS. Przepraszam. Ale na swoje usprawiedliwienie dodam, że dość marnie opisałeś swój problem. Następnym razem napisz dosadniej, co jest głównym problemem, bo czytając szybko kilkanaście postów, nie sposób skupić się nad każdym słowem smile.gif

Teraz odnośnie problemu:

Do końca się nie da. Problem polega na tym, że czas wyświetlenia czegoś na ekran trwa dość długo. Jeżeli chodzi Ci tylko o to, żeby nie muliło przeglądarki piszesz to wszystko bardziej profesjonalnie i trwa to około 3s i masz wszystko szybko wyświetlone:
Kod
<div id="test">
</div>

<script>
var parent = document.getElementById("test");
var el,str,n;

for (n = 0; n < 50000; ++n){
    str = Math.floor(Math.random()*268435455).toString(16);

    el = document.createTextNode(n +" --> "+ str);
    parent.appendChild( el );

    el = document.createElement('br');
    parent.appendChild( el );
}
</script>


Jeżeli jednak chcesz mieć taki efekt pojawienia się tego na ekranie to:
Kod
<div id="test">
</div>

<script>
var parent = document.getElementById("test");
var n = 0;
var el,str,n;

petla = setInterval( function(){
  if( n<5000 ){
    str = Math.floor(Math.random()*268435455).toString(16);

    el = document.createTextNode(n++ +" --> "+ str);
    parent.appendChild( el );

    el = document.createElement('br');
    parent.appendChild( el );
  } else {
   clearInterval( petla );
  }
}, 1 );

</script>


Ew. jak chcesz wszystko jeszcze szybciej to wyświetlaj to paczkami np. co 100 wpisów:
Kod
<div id="test">
</div>

<script>
var parent = document.getElementById("test");
var n = 1;
var el, el2, str,n;

petla = setInterval( function(){
  if( n<5000 ){
    el2 = document.createDocumentFragment();
    for(; (n%100 && n<5000); n++){
      str = Math.floor(Math.random()*268435455).toString(16);

      el = document.createTextNode(n++ +" --> "+ str);
      el2.appendChild( el );

      el = document.createElement('br');
      el2.appendChild( el );
    }
    parent.appendChild( el2 );
  } else {
   clearInterval( petla );
  }
}, 1 );

</script>



--edit--
Osobiście chyba bym zrobił coś na wzór tego, czyli wyświetlenie 100, a później dopiero całą resztę :
Kod
<div id="test">
</div>

<script>
var parent = document.getElementById("test");
var el, el2, str,n;

el2 = document.createDocumentFragment();
for (n = 0; n < 100; ++n){
    str = Math.floor(Math.random()*268435455).toString(16);

    el = document.createTextNode(n +" --> "+ str);
    el2.appendChild( el );

    el = document.createElement('br');
    el2.appendChild( el );
}

parent.appendChild( el2 );
el2 = document.createDocumentFragment();

setTimeout( function(){
for (; n < 50000; ++n){
    str = Math.floor(Math.random()*268435455).toString(16);

    el = document.createTextNode(n +" --> "+ str);
    el2.appendChild( el );

    el = document.createElement('br');
    el2.appendChild( el );
}
parent.appendChild( el2 );},
100);
</script>

nospor
Raczej się nie da. Petla nie jako wstrzymuje proces wyświetlania.
Musiałbyś to robić nie wpętli a kroczkami wywoływanymi co jakiś czas, coś ala to co ci już proponowano
Kod
<script type="text/javascript">
var n=0;
function gp(){
    document.write(n + "<br />");
    n++;
if (n<500)
setTimeout(gp,0);

}
setTimeout(gp,0);
</script>
Arcadius
Rozumiem, dziekuję za konkretną odpowiedź.
Nie byłem pewien, ale już widzę, że pętla wywłaszcza wszystko.

Cytat(nospor @ 31.08.2012, 09:13:53 ) *
Raczej się nie da. Petla nie jako wstrzymuje proces wyświetlania.
Musiałbyś to robić nie wpętli a kroczkami wywoływanymi co jakiś czas, coś ala to co ci już proponowano
Kod
<script type="text/javascript">
var n=0;
function gp(){
    document.write(n + "<br />");
    n++;
if (n<500)
setTimeout(gp,0);

}
setTimeout(gp,0);
</script>

kamil4u
Cytat
Przepraszam, otarłeś się o problem, tym fragmentem kodu:

Cytat
Jednak zapomniałeś, że mówimy o pętli "for"!


Teraz to Ty czytasz nie dokładnie.
Cytat
W swoich wszystkich postach nawet się nie otarłeś o problem smile.gif
A pytanie brzmiało : Chciałem wyprowadzić wartość "n" na ekran w trakcie wykonywania się pętli, podpowie mi ktoś?

Moja odp.
Cytat
Do końca się nie da.


Następnie podałem Ci klika możliwości:
- szybkie wykonanie się pętli
- wyświetlanie krokowe
- wyświetlanie seriami po 100
- wyświetlanie najpierw 100, a potem, zanim ktoś zdąży przewinąć, całą resztę

Teraz minuta skupienia i sam dochodzisz do wniosku, że nie da się w pętli for wyświetlać i literować na raz. Za to można problem obejść jednym z kodów, które zaproponowałem, w zależności od potrzeb. Myślę, że to już nie ocieranie się o problem, a jego wszystkie możliwe wariacje.

Powodzenia w swoich projektach i pozdrawiam.

--edit--
Jeszcze odnośnie Twoich postów i lenistwa
Cytat
A skąd Ty tak dobrze wiesz ile czasu poświęciłem na poszukanie rozwiązania?

Google -> js wyświetlanie w pętli for -> http://forum.pclab.pl/topic/382588-JavaScr...nia-p%C4%99tli/

Cytat
pętla jest wykonywana bez przerwania chyba ze takie zaplanujesz wiec nic dopóki pętla działa nie robisz wink.gif


Komentarz zbyteczny smile.gif
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-2025 Invision Power Services, Inc.