Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
something wrong
#1
Nie wiem czemu nie działa mi pewna funkcja, lub inaczej. W ogóle nie jest wywoływana. Może to być wina tego, że wywołuje click na rzecz diva?

Kod PHP:
        $("div.but").click(function () {
            $(
this).slideSwitchEvent();
        }); 

czy można stosować w ten sposób this? dodam, że w samej funkcji też mam kilka razy użyte this.

edit: jeszcze dodam o co mi chodzi. Chcę zmienić klasę danego diva po kliknięciu w niego i tylko w niego, mimo, że inne divy również mają tę klasę. Wydaje mi się więc że powinienem użyć this, ale pewnie błędnie myślę.

edit2:

Napotkałem jeszcze jeden problem. Wstrzymuje funkcję funkcją setTimeout. Jest to funkcja cykliczna, wykonywana co jakiś czas. Niestety funkcja inna wyzwalana zdarzeniem click operuje na tych samych danych. Jak zablokować funkcję drugą do momentu aż poprzednia wykona się do końca?
Odpowiedz
#2
this można tak stosować
ja robie tak że daje alert(this); aby dowiedzieć się czy mam jakiś obiekt przypisany do this czy mam undefined
może też zdarzyć się że zgubisz gdzieś thisa np w ajaxie i będziesz musiał go przekazać w zmiennej
var ten=this;

aby ustawić classe możesz skorzystać z addClass lub removeClass lub toggleClass

aby kliknąć w danego diva i niewywołać akcji z diva pod nim zobacz stopPropagation (nie wiem czy ci to potrzebne)

a co do drugiego pytania to może zrób jakąś zmienną która będzie globalna i która będzie informowała o tym czy zakończono dany cykl
nie wiem dokładnie o co ci chodzi ,musiałbyś bardziej sie rozpisać aby dostać lepszą odpowiedź
Odpowiedz
#3
dzięki za odpowiedź.

Tylko jak poczekać na to aż zmienna globalna się zmieni?
Odpowiedz
#4
chcesz wywołać funkcje kliknięciem i poczekać aż pętla się zakończy??
hmmm może użyj drugiej zmiennej Big Grin
niech po kliknięciu ustawi jakąś zmienną np var kliknieto=true;
i po zakończeniu pętli niech sprawdza czy kliknięto==true i wykona wtedy jakąś operację
albo niech kliknięto przechowuje this
var ktory_guzik_kliknieto=this;

dalej nie wiem o co chodzi
Odpowiedz
#5
Rozumiem, że zmieni ją jedna z funkcji. Druga w tym czasie powinna poczekać na to aż ta zmienna się zmieni. Ładowanie pętli nieskończonej to chyba skandaliczne rozwiązanie względem optymalizacji.
Odpowiedz
#6
opisz do cholery dokłądnie o co chodzi a nie takie granie w ciuciubabke
Odpowiedz
#7
Dwie funkcje, obie operują na tych samych zasobach. Jedna jest cykliczna np co 5 s. Trwa około 1s. Druga związana z eventem. Funkcja pierwsza ma w swojej treści czekanie setTimeout. Jeśli kliknę w trakcie czekania niestety nie uzyskam żądanego efektu ponieważ na jednym zasobie pracują dwie funkcje.

Rozwiązaniem byłoby synchronizacja między nimi w ten sposób, że druga funkcja czeka na zakończenie pierwszej i wtedy się wykonuje, natomiast kolejne wywołanie funkcji pierwszej nastąpi dopiero po wykonaniu funkcji drugiej.
Odpowiedz
#8
Kod:
var guzik_oczekujacy;
var ukonczono_druga=true;

function druga(){
ukonczono_druga=false;
jakas funkcja wywolywana po kliknieciu na jakis guzik_oczekujacy
$(guzik_oczekujacy).addClass('jakasclasa');
guzik_oczekujacy=undefined;
ukonczono_druga=true;
}

funkcja pierwsza_cykliczna(){
if(ukonczono_druga){
...operacja na danych...
jak skonczy to wywoluje oczekujacy guzik...

if(typeof guzik_oczekujacy != undefined){
tutaj cos robimy z guzikiem ktory czekal na zakonczenie pierwszej
druga();
}

}

$('#guzik').click(function(){guzik_oczekujacy=this;});

}
}

z tym że jeżeli klikniesz pare guzików to wykona sie tylko ten ostatni ale nie wiem czy tak ma być czy wszystkie mają się wykonać
jeżeli wszystkie to możesz stworzyć tablice zamiast jednej zmiennej do której będziesz dokładał kolejne guziki które kliknięto i potem w funkcji drugiej zrobić pętlę w której po kolei odczytujesz z tablicy guziki i wykonujesz dla nich jakies zadanie

tylko jezeli robisz np gre to powyzszy kod jest bez sensu bo czas reakcji moze byc zbyt dlugi i kijowo sie bedzie gralo jezeli to nie do gry a doczegos innego to tez nie wiem do czego wiec nie ciezko powiedziec czy to rozwiazanie jest poprawne czy lepiej zrobic to w inny sposob
pomyslu ci nikt nie ukradnie jezeli o to sie martwisz jak wiekszosc amatorow
Odpowiedz


Skocz do:


Użytkownicy przeglądający ten wątek:
Sponsorzy i przyjaciele
SeoHost.pl