Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> W jaki sposób zatrzymać wykonywanie funkcji?
b4rt3kk
post
Post #1





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


W jaki sposób zatrzymać wykonywanie funkcji, tzn powiedzmy ze funkcja przyklad(1,2) wykonuje sie z argumentami 1,2 a po kliknieciu w link chcialbym by ta funkcja obecnie wykonywana sie zatrzymala, a uruchomila sie ta sama funkcja tylko ze z innymi argumentami, np. przyklad(2,5). Dodam, ze funkcja przyklad jest funkcja rekurencyjna, ktora w zalozeniu, ma wykonywac sie w nieskonczonosc, tylko ze w zaleznosci od argumentow w inny sposob. A moze istnieje sposob na podawanie na biezaco argumentow dzialajacej juz funkcji?

Ten post edytował b4rt3kk 27.09.2011, 19:05:50


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


[JAVASCRIPT] pobierz, plaintext
  1.  
  2. var stop = false;
  3.  
  4. function aaa(arg1, arg2) {
  5.  
  6. if(stop) {
  7. stop = false;
  8. return;
  9. }
  10.  
  11. // właściwy kod funkcji
  12. }
  13.  
  14. aaa(1,2);
  15. stop = true;
  16. aaa(2,5);
[JAVASCRIPT] pobierz, plaintext


Go to the top of the page
+Quote Post
flashdev
post
Post #3





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


@CuteOne coś mi się wydaje, że nie o to mu chodzi.

@b4rt3kk prawdopodobnie sam nie potrafi wytłumaczyć o co mu chodzi. Przede wszystkim jak uruchomisz funkcję rekurencyjną to zablokujesz interfejs i kliknięcie w przycisk nawet nie zostanie rozpoznane. Więc z 'zewnątrz' nie jesteś w stanie tego nawet zatrzymać. Chyba że nie będzie to w pełnym tego słowa znaczeniu rekurencja a użyjesz prawidłowo timeout`y.


--------------------
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #4





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Więc tak, dla jasności, mamy funkcję js:

  1. function costam(nr) {
  2.  
  3. if (nr<10) {
  4. alert(nr);
  5. nr++;
  6. costam(nr);
  7. } else {
  8. nr = 1;
  9. costam(nr);
  10. }
  11.  
  12. }


delaye pomijam, bo mysle ze nie sa tu istota sprawy, natomiast gdy funkcja jest powiedzmy w miejscu gdy nr = 6, a klikne odnosnik o akcji onclick = costam(1) to chcialbym zatrzymac poprzednia funkcje costam, a wystartowac nowa z miejsca 1. Jednak wtedy dzialaja obie naraz.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
kilas88
post
Post #5





Grupa: Zarejestrowani
Postów: 305
Pomógł: 25
Dołączył: 27.01.2007

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


Kod
function costam(nr) {

   if (nr<10) {  
      alert(nr);
      nr++;
      costam(nr);
   } else {
      nr = 1;
      costam(nr);
   }

}


Ten kod zablokuje przeglądarkę, bo zadziała następująco:

costam(6); // zgodnie z Twoim przykładem

1. alert(6);
2. klikasz ok
3. alert(7);
4. klikasz ok
5. alert(8);
6. klikasz ok
7. alert(9);
8. klikasz ok
9. alert(1);
10. klikasz ok
etc...

Wyjaśnij więc może o co Ci chodzi? smile.gif Powyższy kod zablokuje przeglądarkę alertami czy co tam wciśniesz.
Go to the top of the page
+Quote Post
CuteOne
post
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Nie wiem w czym widzisz problem...

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. var clicked = false; // ustawia na true podczas klikniecia
  3.  
  4. function cos(nr) {
  5.  
  6. if(nr == 6 && clicked) {
  7.  
  8. clicked = false;
  9. costam(1);
  10. }
  11. elseif(nr < 10 && !clicked) {
  12.  
  13. alert(nr);
  14. nr++;
  15. costam(nr);
  16. }
  17. elseif(nr >= 10) {
  18. nr = 1;
  19. costam(nr);
  20. }
  21. return;
  22. }
[JAVASCRIPT] pobierz, plaintext


Ten post edytował CuteOne 28.09.2011, 12:47:49
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #7





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


@CuteOne: owszem, kombinowałem w ten sposób, ale niestety po dodaniu timeotów, funkcja zauważa zmianę zmiennej dopiero po wywołaniu, a ja bym chciał by nastąpiło to natychmiast. Kod HTML wygląda tak:

  1. <input type="hidden" id="curr1" value="1">
  2.  
  3. <ul>
  4. <li id="pointer1"><a href="#" onclick="forceChange = 1">1</a></li>
  5. <li id="pointer2"><a href="#" onclick="forceChange = 2">2</a></li>
  6. <li id="pointer3"><a href="#" onclick="forceChange = 3">3</a></li>
  7. <li id="pointer4"><a href="#" onclick="forceChange = 4">4</a></li>
  8. <li id="pointer5"><a href="#" onclick="forceChange = 5">5</a></li>
  9. <li id="pointer6"><a href="#" onclick="forceChange = 6">6</a></li>
  10. </ul>


natomiast JS:

  1. var forceChange = 0;
  2.  
  3. function carousel1() {
  4.  
  5. timeDelay = 4000;
  6. currentInput = document.getElementById('curr1');
  7.  
  8. if (forceChange != 0) {
  9. currentInput.value = forceChange;
  10. }
  11.  
  12. currentValue = parseInt(currentInput.value);
  13. forceChange = 0;
  14.  
  15. pointerSelected(currentValue);
  16.  
  17. if (currentValue<6) {
  18. currentInput.value = parseInt(currentInput.value)+1;
  19. } else {
  20. currentInput.value = 1;
  21. }
  22.  
  23. window.setTimeout('carousel1();', timeDelay);
  24.  
  25. }


pointerSelected(currentValue) jedynie zmienia nazwy klas, więc kod nie jest potrzebny. Po kliknięciu owszem, karuzela kręci się od danego momentu, jednak zmiana następuje dopiero po kolejnym wywołaniu carousel1() co nastepuje po pewnym opoznieniu okreslonym w timeDelay.

Ten post edytował b4rt3kk 28.09.2011, 13:36:36


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
flashdev
post
Post #8





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(CuteOne @ 28.09.2011, 13:47:07 ) *
Nie wiem w czym widzisz problem...

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. var clicked = false; // ustawia na true podczas klikniecia
  3.  
  4. function cos(nr) {
  5.  
  6. if(nr == 6 && clicked) {
  7.  
  8. clicked = false;
  9. costam(1);
  10. }
  11. elseif(nr < 10 && !clicked) {
  12.  
  13. alert(nr);
  14. nr++;
  15. costam(nr);
  16. }
  17. elseif(nr >= 10) {
  18. nr = 1;
  19. costam(nr);
  20. }
  21. return;
  22. }
[JAVASCRIPT] pobierz, plaintext


Na ten cytat mogę odpowiedzieć innym cytatem:
Cytat(Douglas Crockford)
java script: The World's Most Misunderstood Programming Language


Prosty przykład.
Kod
var done = false;
setTimeout(function(){
  done = true;
}, 1e3);
while( !done );
alert('done!');


Pojawi się komunikat? Nie pojawi? A może przeglądarka się zawiesi?

Ten post edytował flashdev 1.10.2011, 17:15:55


--------------------
Go to the top of the page
+Quote Post
pienso
post
Post #9





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 2.10.2011

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


return ?
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 Aktualny czas: 20.08.2025 - 07:32