Nasze strony wykorzystują pliki cookies. Używamy cookies i podobnych m.in. w celach reklamowych i statystycznych oraz w celu dostosowania serwisów do potrzeb użytkowników. Mogą też stosować je nasi reklamodawcy, firmy badawcze oraz dostawcy aplikacji. W przeglądarce można zmienić ustawienia dotyczące cookies. Więcej informacji. Jeśli nie wyrażasz zgody, opuść tę stronę.

Czy javascript ma polecenie DoEvent

Forum dyskusyjne poświęcone zagadnieniom związanym z językami JavaScript, VBScript i podobnym

Moderator: Grupa pościgowa ;-)

Czy javascript ma polecenie DoEvent

Postprzez Heban » 14 lipca 2005, o 15:26

Heban
Zanim zapytam poszukam odpowiedzi
Zanim zapytam poszukam odpowiedzi
 
Posty: 3
Dołączył(a): 14 lipca 2005, o 15:10

Czy javascript ma polecenie DoEvent

Postprzez DEXTER:) » 14 lipca 2005, o 15:42

DEXTER:)
Mega GURU
Mega GURU
 
Posty: 1366
Dołączył(a): 14 lipca 2004, o 11:27

Czy javascript ma polecenie DoEvent

Postprzez Heban » 14 lipca 2005, o 17:14

Heban
Zanim zapytam poszukam odpowiedzi
Zanim zapytam poszukam odpowiedzi
 
Posty: 3
Dołączył(a): 14 lipca 2005, o 15:10

Czy javascript ma polecenie DoEvent

Postprzez DEXTER:) » 14 lipca 2005, o 17:21

DEXTER:)
Mega GURU
Mega GURU
 
Posty: 1366
Dołączył(a): 14 lipca 2004, o 11:27

Czy javascript ma polecenie DoEvent

Postprzez Heban » 14 lipca 2005, o 17:41

Heban
Zanim zapytam poszukam odpowiedzi
Zanim zapytam poszukam odpowiedzi
 
Posty: 3
Dołączył(a): 14 lipca 2005, o 15:10

Czy javascript ma polecenie DoEvent

Postprzez Wydra707 » 14 lipca 2005, o 22:06

Dlaczego napis nie ukazuje się tuż po kliknięciu? MSIE nie uaktualnia ekranu i w ogóle nie reaguje na to co się na nim dzieje, dopóki nie zakończy aktualnie wykonywanej funkcji (nawet nie zmienia kursora np. nad linkami). Dlaczego? Powiedzmy, że by reagował. Kliknięcie wywołuje zdarzenie onclick - trzeba je obsłużyc. A więc co wykonywać: funkcję, czy obsługę zdarzenia? Jeśli obsługę, to zmiana tekstu na stronie wywoła całą lawinę kolejnych zdarzeń itd... Dlatego wszystko jest wykonywane po kolei.

Jeśli np. masz dwie instrukcje jedna po drugiej:

window.document.body.style.background='#ff0000'
window.document.body.style.background='#ffff00'

to tło strony nie mignie na czerwono. Najpierw zostanie podstawiona wartość #ff0000, następnie wartość #ffff00, a dopiero po zakończeniu całej funkcji ekran będzie zaktualizowany "za jednym zamachem" do bieżącej wartości (zrobi się od razu żółty).

Jeśli więc masz chodzącą w kółko zamkniętą pętlę, to Explorer "nie patrzy" wtedy na nic innego - dopóki nie skończy. Wyjątkiem jest wywołanie okienka alert(), które powoduje uaktualnienie ekranu w momencie jego wyświetlenia i chwilowe zatrzymanie funkcji.

W takiej sytuacji używa się sztuczki, o której wspomniał Dexter: konstruuje się funkcję w taki sposób, aby po wykonaniu iluś obiegów zapisywała wyniki i kończyła się wywołaniem jej dalszego ciągu metodą setTimeout() z minimalnym czasem np. 1ms. Po takim chwilowym zakończeniu funkcji Explorer uaktualni ekran i na chwilę "rzuci na niego okiem". Jeśli wtedy zajdzie zdarzenie (np. onclick) będzie obsłużone. Niemal natychmiast setTimeout() wywoła funkcję ponownie. Ta odczyta zapisane uprzednio wartości i będzie kontynuowała od miejsca przerwania. W efekcie cała pętla wykona się "na raty", z przerwami.

A co do Twojego pierwszego pytania, to ani w JavaScript, ani w VBScript nie ma DoEvent. Można natomiast programowo kliknąć dowolny element strony lub wywołać dowolne inne zdarzenie na stronie - ale to nie zmieni faktu, że ekran zostanie uaktualniony dopiero po zakończeniu bieżąco wykonywanej funkcji. Można także wywołać kod jakiegoś błędu i przechwycić go programowo, co w efekcie przerwie funkcję (a np. wywoła inną). Ale wszelkie działania programowe niczego nie zmieniają w zakresie "czułości" czekającego na naciśnięcie guzika. Czy Explorer będzie wykonywał taką czy inną funkcję i tak nie będzie "patrzył" na ekran, dopóki nie zakończy. Pozostaje więc setTimeout() co jednak potrafi dość znacząco wydłużyć wykonywanie dużych pętli.

Pozdrawiam
Paweł Rajewski
Wydra707
Znawca tematu
Znawca tematu
 
Posty: 482
Dołączył(a): 1 października 2002, o 19:21

Czy javascript ma polecenie DoEvent

Postprzez DEXTER:) » 14 lipca 2005, o 22:36

Muszę przyznać jedną rzecz. Dlaczego przezornie moją domyślną przeglądarką w Pajączku jest IE :?: Ano dlatego, że kilka razy zdarzyło mi się zawalić jakiś pierdółek, co doprowadzało do nieskończonej pętli – system zamiera :wink: O ile w IE wystarczy odczekać 30 sekund, to Mozilla pieprzy się do usranej :twisted:

@Wydra707: Jak ustawić IE tak, by czekał tylko 10 sekund :?:
DEXTER:)
Mega GURU
Mega GURU
 
Posty: 1366
Dołączył(a): 14 lipca 2004, o 11:27

Czy javascript ma polecenie DoEvent

Postprzez Wydra707 » 15 lipca 2005, o 01:30

Wydra707
Znawca tematu
Znawca tematu
 
Posty: 482
Dołączył(a): 1 października 2002, o 19:21


Powrót do Języki JavaScript i VBScript

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników

cron