![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 11.03.2009 Skąd: Cieszyn Ostrzeżenie: (0%) ![]() ![]() |
Kod $("#test").click(function (){loop(4); }); var i = 0; function loop( iHowMany ){ $("#test").text(i++); if ( i < iHowMany ){ setTimeout("loop( iHowMany )",1000); } } w założeniu funkcja ta po naciśnięciu przycisku powinna się powtarzać tak długo dopóki "i" nie będzie mniejsze od 4 Przeszukałem już wiele stron i ciągle nie mogę sobie z tym poradzić. Przy próbie ponownego wywołania funkcji Loop wyskakuje błąd"loop is not defined" Bardzo proszę o pomoc bo przez to nie mogę kontynuować mojego projektu. ogólnie jako argument będzie podawana tabela z parametrami i po określonym czasie mają one się zmieniać lecz nie mogę przez to przebrnąć |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 561 Pomógł: 72 Dołączył: 15.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj czegoś takiego:
Sprawdzone, działa. Ten post edytował krowal 25.05.2011, 07:30:17 -------------------- Nawet świnka może wejść na drzewo kiedy jest chwalona :)
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Błąd który dostajesz jest dziwny. Na mój gust błąd powinien brzmieć
iHowMany is not defined źle wywołujesz funkcję w setTimeout. Powinno być setTimeout("loop( "+iHowMany+" )",1000); -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 11.03.2009 Skąd: Cieszyn Ostrzeżenie: (0%) ![]() ![]() |
krowal dzięka użyję twojej wersji
nospor pomimo że wywołałem twoim sposobem wciąż wywala mi błąd "loop is nor defined" |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No to nie pokazujesz w takim razie całego kodu bo to ci podałem działa bez problemu
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 561 Pomógł: 72 Dołączył: 15.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jakby nie było, nospor mimo iż nie dał gotowego kodu czym naraził się na pogardę zakładającego temat miał rację z tym, że błąd powinien być taki: 'iHowMany is not defined' a nie ten, który tu wpisałeś
![]() -------------------- Nawet świnka może wejść na drzewo kiedy jest chwalona :)
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
No to nie pokazujesz w takim razie całego kodu bo to ci podałem działa bez problemu zadziała bez problemu ale tylko i wyłącznie wtedy, gdy funkcja loop jest zdefiniowana w globalnym zasięgu (czyli pod window), jeśli jednak funkcja jest zagnieżdżona niżej ten sposób nie zadziała (i wtedy window.loop jest nie zdefiniowany ;] - inna sprawa, że pisze samo loop) - poza tym tą metodę nazwałbym niejawnym używaniem eval'a... na szybko wystarczyło, jeśli wywołanie obudował by w funkcję anonimową i nie jako tekst:
jednak jeśli gdzieś dalej on operuje na zmiennej iHowMany a nie chciał, by się zmieniała powinien tą zmienną przekazać jako parametr - czasami na dynamicznym sterowaniu można podmieniać i definicje metod/funkcji - więc funkcję też można przekazać dla pewności przez callback jeśli jej definicja ma się nie zmieniać:
przypisanie zmiennych do null'a callback = arg1 = null; nie jest konieczne aczkolwiek lepiej zerować nie potrzebne zmienne ze znikającego zasięgu by zapobiec wyciekowi pamięci w niektórych przeglądarkach... wszystko też zależy, gdzie dana zmienna jest zdefiniowana, od zasięgu i od tego, czy funkcja przyjmuje argumenty - jeśli nie przyjmuje argumentów a operuje na zmiennych z wyższego poziomu to równie dobrze można zapisać bez cudzysłowia: Kod setTimeout(callback, 1000); wszystkie powyższe przypadki są szybsze od niejawnego eval'a i dają możliwość operowania na zagnieżdżonych zmiennych i funkcjach... Ten post edytował zegarek84 25.05.2011, 10:36:53 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat na szybko wystarczyło, jeśli wywołanie obudował by w funkcję anonimową i nie jako tekst: To się wykona od razu a nie po sekundzie. [JAVASCRIPT] pobierz, plaintext setTimeout(function(){loop( iHowMany );},1000); ![]() Co do zasięgu to zapewne masz rację. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
To się wykona od razu a nie po sekundzie. ![]() jak niemal każdy na tym forum znasz firebug'a - wklej sobie to do konsoli i luknij na efekty:
ku woli wyjaśnienia - function(){} - to jest deklaracja anonimowej funkcji/obiektu - by się on wykonał od razu należało by zapisać (function(){})()... przy okazji w poście wyżej poprawiam błąd gdyż odruchowo wpisałem przy przekazywaniu argumentów function(){}() zamiast właśnie wspomnianego (function(){})() - co też by zadziałało ale nie na wszystkich przeglądarkach chociaż nie programuję zawodowo to obiektowość w JS (wraz z dziedziczeniem w prototype [nie piszę o bibliotece] bez wywoływania niepotrzebnych konstruktorów przed deklaracją obiektu) i sam JavaScript raczej znam na wylot Ten post edytował zegarek84 25.05.2011, 10:44:32 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Spoko maroko, nie denerwuj się. Poprostu szybko spojrzałem i nie zauważyłem, że ty tam wkładasz deklarację anonimowej funkcji
![]() function(){....} Z tą funkcją jest jak najbardziej ok i nie potrzeba mi do tego FireBuga ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 11.03.2009 Skąd: Cieszyn Ostrzeżenie: (0%) ![]() ![]() |
Kod $(document).ready(function(){ inne funkcje nie związane z tym $("#test").click(function (){loop(4); }); var i = 0; function loop( iHowMany ){ $("#test").text(i++); if ( i < iHowMany ){ setTimeout("loop( iHowMany )",1000); } } }); nic więcej tam nie było, ps: czemu miałbym kłamać że mi inny komunikat wyskakuje ![]() finalnie jak mi to zadziałało do funkcji jest przekazywany parametr mówiący jak liczna jest tabela (można to policzyć ale sobie przekazałem), plus tabela ze ścieżkami do zdjęć. W rezultacie uzyskałem to co chciałem czyli zmianę określonych zdjęć przekazanych przez php. i obojętne mi to było jakim sposobem to zrealizuje, tamten mi nie chciał zadziałać więc użyłem tego co działał finalnie wyszło to tak: Kod $(document).ready(function(){ reszta nie związana z tym $("#again").click(function (){ location.reload(); }); }); function loop(amount, tab){ this.interval = null; var i = 0; this.interval = setInterval(function(){ $('#showimg').attr("src" , tab[i++]); if (i == amount){ $("#again").css('display','block'); clearInterval(this.interval); } },3000); } może nie wygląda to estetycznie i fachowo ale działa więc chwilowo mi wystarczy ![]() wywołanie tego wygląda jeszcze gorzej ale nie znam się jeszcze za dobrze na łączeniu php i javascriptu Ten post edytował Coyot121 26.05.2011, 15:17:55 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No, czyli funkcję loop definiowałeś lokalnie, dlatego nie była widziana, jakbyś zdefiniował od razu ją globalnie, czyli poza document.ready to byś dostał błąd o którym ja mówiłem
![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 28.06.2025 - 00:33 |