Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jquery] Problem z rekurencją
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
mokry
Witam, Mam poniższy skrypt JS, który ma wykonywać się rekurencyjnie do czasu aż pewna zmienna nie osiągnie wartości 0:

  1. <script type="text/javascript">
  2. $(function() {
  3. $( "#progressbar" ).progressbar({
  4. value: <? echo $progress; ?>
  5. });
  6. });
  7.  
  8. function send_newsletter(n) {
  9. if($("#ajax_send").button( "option", "disabled") == true) {
  10. return false;
  11. }
  12. $("#ajax_send").button( "option", "disabled", true );
  13. $("#ajax_send").button( "option", "label", "Wysy\u0142anie newsletter'a... proszę czekać" );
  14. //Ajax request
  15. $.getJSON("<? echo URL::site(Request::instance()->uri); ?>",
  16. {
  17. ajax_send: "1"
  18. },
  19. function(data) {
  20. //Uzupelnij dane poszczegolnych adresow e-mail
  21. $.each(data.emails, function(key, value) {
  22. //alert(value.status);
  23. if(value.status == 1) {
  24. $("#status-"+key).text("wiadomo\u015bć wysłana");
  25. }
  26. if(value.status == 0) {
  27. $("#status-"+key).html("<span style='color:#D10000;font-weight:bold'>ERROR:</span> "+value.error);
  28. }
  29. });
  30.  
  31. //Zmien wartość progress bara
  32. $("#progressbar").progressbar( "option", "value", data.progress);
  33.  
  34. if(data.to_send == 0) {
  35. //Wlacz przycisk, jezeli wszystko poszlo OK
  36. //$("#ajax_send").button( "option", "disabled", false );
  37. $("#ajax_send").button( "option", "label", "Wszystkie wiadomo\u015bci zostały wysłane." );
  38. } else {
  39. setTimeout(function() {
  40. send_newsletter(0);
  41. }, 10000);
  42. }
  43.  
  44. return data.to_send;
  45.  
  46. });
  47. }
  48.  
  49. $("#ajax_send").click(function() {
  50. send_newsletter(0);
  51. });
  52.  


Powyżej znajduje się setTimeout(), który teoretycznie powinien wywołać funkcję ponownie, jednak tak się nie dzieje. Po uruchomieniu funkcji za pomocą kliknięcia w button #ajax_send funkcja wywołuje się tylko jeden raz. W setTimeout() jeżeli dam alert(); pokazuje go...

Dzięki za wszelką pomoc wink.gif
nospor
if($("#ajax_send").button( "option", "disabled") == true) {
return false;
}
$("#ajax_send").button( "option", "disabled", true );
Za pierwszym razem IF jest nie prawdziwy wiec idzie dalej. Za drugim razem IF jest prawdziwy wiec kaput i nie ma co się dziwić, że sie nie odpala.
mokry
Dzięki nospor - teraz działa.
Na początku kod miał wykonywać się nieco inaczej. Później zapomniałem o wyrzuceniu tego z kodu.
nospor
Nastepnym razem aletruj swój kod to nie będziesz z takimi banałami po forach latał
Co pare linijek wal alert i bedziesz widzial do której dochodzi a do której nie.
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.