Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> addEventListener - dodawanie zdarzenia na początek.
erix
post 23.08.2010, 20:46:53
Post #1





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Kolejne trudne pytanie, na które prawdopodobnie nie otrzymam odpowiedzi, ale spróbować zawsze można. biggrin.gif

Mianowicie - w jaki sposób dodać zdarzenie przez addEventListener dla danego elementu na początek kolejki zdarzeń, a nie na jej koniec?

Piszę UserJS-a i potrzebuję wykonać swoją funkcję zanim fabryczny handler zostanie wykonany, a nie ma sensu reimplementować istniejącej funkcjonalności.

Jakieś pomysły?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
wookieb
post 23.08.2010, 21:02:47
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Metoda addEventListener nie wspiera takiego rozwiązania. Opcją jest np podpięcie zdarzenia do elementu rodzica
[JAVASCRIPT] pobierz, plaintext
  1. function f1()
  2. {
  3. console.log('p');
  4. }
  5. function f2()
  6. {
  7. console.log('d');
  8. }
  9.  
  10. var element = document.getElementById('cholera');
  11. element.addEventListener('click', f1, true);
  12. element.parentNode.addEventListener('click', f2, true);
[JAVASCRIPT] pobierz, plaintext


--------------------
Go to the top of the page
+Quote Post
vokiel
post 23.08.2010, 21:07:44
Post #3





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Przepisać to do tempowego elementu, dodać swój i dopisać to z temp'a?

Możesz sprawdzać co już jest podpięte korzystając z eventListenerList i usuwać przez removeEventListener()


--------------------
Go to the top of the page
+Quote Post
erix
post 23.08.2010, 22:17:58
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




~vokiel - http://stackoverflow.com/questions/2424737...-implementation - więc trzeba zapomnieć. sad.gif

~wookieb - no tak, ale sęk w tym, że zdarzenie rodzica zostanie wykonane po zdarzeniu dziecka. Więc odpada, bo moje zdarzenie musi zostać wykonane przed fabrycznymi.

Huh, zapomniałem, że użyłeś capture; zobaczymy, jak w praniu wyjdzie.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
wookieb
post 23.08.2010, 22:45:57
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Jak testowałem to działało. Niestety jak się domyślasz nie zadziała to w każdym typie zdarzeń albo obiektach które nie mają rodzica.

Ten post edytował wookieb 23.08.2010, 22:46:16


--------------------
Go to the top of the page
+Quote Post
Crozin
post 23.08.2010, 23:28:02
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Dla jakiej przeglądarki piszesz tego UserJS? Opera udostępnia kilka narzędzi pozwalających zrobić trochę magii w JS-cie strony, GreaseMonkey o ile dobrze kojarzę też.
Go to the top of the page
+Quote Post
erix
post 24.08.2010, 09:05:20
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No właśnie pod Operę to piszę, tylko do jakiej konkretnie funkcji pijesz? magicFunction/magicVariable mi nie pomoże. [;


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
zegarek84
post 24.08.2010, 10:16:25
Post #8





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(erix @ 23.08.2010, 21:46:53 ) *
...Piszę UserJS-a i potrzebuję wykonać swoją funkcję zanim fabryczny handler zostanie wykonany, a nie ma sensu reimplementować istniejącej funkcjonalności.

Jakieś pomysły?
Cytat(erix @ 24.08.2010, 10:05:20 ) *
No właśnie pod Operę to piszę...
Jedno z rozwiązań podał vokiel... ale co masz na myśli przez sformułowanie "fabryczny handler" - czy masz na myśli podpięte zdarzenie przez skrypt znajdujący się na stronie?? W operze o tyle jest wygodnie, że można załączać userscript'y na 2 sposoby - z podwójnym rozszerzeniem jak w Greasemonkey [skrypt wykonuje się po załadowaniu dokumentu - nie pamiętam kture ze zdarzeń wtedy zachodzi] lub z samym rozszerzeniem *.js - i tutaj już pasuje wykrywać zdarzenia typu "DOMContentLoaded"... skrypty urzytkownika w przypadku *.js są wcześniej w oknie więc jest spora szansa podpiąć pierwszemu swoje zdarzenia [podpinając na starcie wykrycie zdarzenia załadowanego dokumentu po czym podpięcie swojego zdarzenia w pierwszej kolejności...] - no jeszcze można trafić na szybsze wywołanie funkcji w dokumencie już po załadowaniu dokumentu - gdy funkcja startująca jest za zamykającym tagiem </html>...

[edit]
lub jeszcze skoro skrypty *.js są zanim dokument się załaduje, to można sprawdzić, czy gdy document się ładuje, czy jest inicjowane zdarzenie typu DOMNodeInserted lub DOMNodeInsertedIntoDocument i jeśli tak to po każdym takim zdarzeniu sprawdzić, czy jest już wymagany element w dokumencie...

Ten post edytował zegarek84 24.08.2010, 10:28:54


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
erix
post 24.08.2010, 12:39:47
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Jedno z rozwiązań podał vokiel... ale co masz na myśli przez sformułowanie "fabryczny handler"

A czytałeś linka, który zamieściłem wcześniej?

Cytat
ale co masz na myśli przez sformułowanie "fabryczny handler" - czy masz na myśli podpięte zdarzenie przez skrypt znajdujący się na stronie??

Yup.

Cytat
lub jeszcze skoro skrypty *.js są zanim dokument się załaduje, to można sprawdzić, czy gdy document się ładuje, czy jest inicjowane zdarzenie typu DOMNodeInserted lub DOMNodeInsertedIntoDocument i jeśli tak to po każdym takim zdarzeniu sprawdzić, czy jest już wymagany element w dokumencie...

Huh, pod tym kątem nie pomyślałem. Tylko że nie DOMNodeInserted, tylko trzeba będzie dopiąć przez beforeScript. smile.gif

Dzięki, oświeciłeś mnie. smile.gif

ps. pomógły polecą, jak sprawdzę w działaniu. Przetestuję oba rozwiązania. winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
zegarek84
post 24.08.2010, 13:42:33
Post #10





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(erix @ 24.08.2010, 13:39:47 ) *
A czytałeś linka, który zamieściłem wcześniej?
mam problemy z netem [radiówka i kiepska pogoda - ale już zerknąłem ^^]
co przez google mi się przewinęło [przy tym necie na strony nie wchodziłem] to jest to na 99% zaimplementowane do greasemonkey - ale zapomnijmy o tym...
Cytat(erix @ 24.08.2010, 13:39:47 ) *
Huh, pod tym kątem nie pomyślałem. Tylko że nie DOMNodeInserted, tylko trzeba będzie dopiąć przez beforeScript. smile.gif

Dzięki, oświeciłeś mnie. smile.gif

dawno nie grałem więc dawno dla siebie i znajomych nie pisałem automatów... i tego beforeScript chyba wcześniej też nie było - z ciekawości luknąłem na stronę opery i mnie rozwaliło - SKORO ZNASZ TO ZDARZENIE TO POWINIENEŚ ZNAĆ BANALNIEJSZĄ METODĘ ;D

szkoda się rozpisywać i przede wszystkim przeczytaj całą stronę tam:
User JavaScript - Examples of use od Loading scripts [czyli to o czym teraz napisałeś] w dół...

w operze w userscript masz takie metody jak:
BeforeEvent.type
BeforeEventListener.type

i nie interesujące Cię AfterEvent.type ;D
po problemie winksmiley.jpg


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
erix
post 24.08.2010, 14:45:20
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
luknąłem na stronę opery i mnie rozwaliło - SKORO ZNASZ TO ZDARZENIE TO POWINIENEŚ ZNAĆ BANALNIEJSZĄ METODĘ ;D

No tak, ale lepiej było też poznać metodę opartą na czystym JS, a nie wyłącznie na API do UserJS.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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 Wersja Lo-Fi Aktualny czas: 25.06.2025 - 11:45