znaczacy > comp.lang.* > comp.lang.javascript

Roman Tyczka (10.09.2018, 11:15)
Witam,

Czy wczytywanie skryptów typu jQuery w sekcji <head> jest poprawne?
rePeter (10.09.2018, 11:50)
Mon, 10 Sep 2018 11:15:48 +0200
Roman Tyczka <noemail> napisal(a):

> Witam,
> Czy wczytywanie skryptów typu jQuery w sekcji <head> jest poprawne?


IMHO, najlepiej na koncu strony przed samym </body>
jQuery i pozostale skrypty.
Roman Tyczka (10.09.2018, 13:24)
On Mon, 10 Sep 2018 11:50:46 +0200, rePeter wrote:

>> Czy wczytywanie skryptów typu jQuery w sekcji <head> jest poprawne?

> IMHO, najlepiej na koncu strony przed samym </body>
> jQuery i pozostale skrypty.


To jest troche klopot. Bo jak rozwiazujecie taki uklad, ze strona sklada
sie z kilku fragmentów, bedacych szablonami i w nich nastepuja odwolania do
jQuery, które podpinaja zdarzenia pod np. buttony formularzy? One sa w
srodku strony, wiec jak zaczynaja dzialac to jQuery jeszcze nie bedzie
zaladowane, bo laduje sie na koncu i bach.. blad.
rePeter (10.09.2018, 14:05)
Mon, 10 Sep 2018 13:24:26 +0200
Roman Tyczka <noemail> napisal(a):

> On Mon, 10 Sep 2018 11:50:46 +0200, rePeter wrote:
> To jest troche klopot. Bo jak rozwiazujecie taki uklad, ze strona sklada
> sie z kilku fragmentów, bedacych szablonami i w nich nastepuja odwolania do
> jQuery, które podpinaja zdarzenia pod np. buttony formularzy? One sa w
> srodku strony, wiec jak zaczynaja dzialac to jQuery jeszcze nie bedzie
> zaladowane, bo laduje sie na koncu i bach.. blad.


Skrypty musza zaczekac az wczyta sie caly DOM,
czyli albo ladowac sie na koncu strony
albo, jesli ladowane w header, czekac az reszta strony sie zaladuje.
np. $(document).ready lub $(window).load
W przeciwnym wypadku skrypt moze odwolywac sie do elementu który jeszcze nie zostal
wczytany/utworzony.
Roman Tyczka (10.09.2018, 15:56)
On Mon, 10 Sep 2018 14:05:06 +0200, rePeter wrote:

> Skrypty musza zaczekac az wczyta sie caly DOM,
> czyli albo ladowac sie na koncu strony
> albo, jesli ladowane w header, czekac az reszta strony sie zaladuje.
> np. $(document).ready lub $(window).load
> W przeciwnym wypadku skrypt moze odwolywac sie do elementu który jeszcze nie zostal
> wczytany/utworzony.


Aj nol...
Jeszcze raz, postaram sie lepiej opisac.
Uzywam szablonów Mustache, one pozwalaja osadzac jedne szablony w innych
przez skladnie:

<html>
<head>
</head>
<body>
{{> szablon naglowka}}
{{> szablon menu}}
{{> szablon informacji X}}
{{> szablon stopki}}
{{> szablon z includami jQuery}}
</body>

I teraz za pomoca szablonu "szablon z includami jQuery" laduje jQuery na
koncu.
Ale juz w szablonie "szablon informacji X" juz chce przypisac zdarzenia
click do buttona. I nie moge.
Jak to obejsc?
rePeter (10.09.2018, 20:18)
Mon, 10 Sep 2018 15:56:33 +0200
Roman Tyczka <noemail> napisal(a):

[..]
> Ale juz w szablonie "szablon informacji X" juz chce przypisac zdarzenia
> click do buttona. I nie moge.
> Jak to obejsc?


jQuery mozesz zaladowac w naglówkach, byleby skrypty z niego korzystajace odpalac po
zaladowaniu elementu do którego sie odnosza. Powinno zadzialac.
Roman Tyczka (10.09.2018, 20:35)
On Mon, 10 Sep 2018 20:18:52 +0200, rePeter wrote:

> jQuery mozesz zaladowac w naglówkach, byleby skrypty z niego korzystajace odpalac po
> zaladowaniu elementu do którego sie odnosza. Powinno zadzialac.


No, ze zadziala to wiem, tak zreszta teraz mam, tylko wlasnie spotykalem
sie z twierdzeniem, ze skrypty to na koncu stad ten watek zaczalem, zeby to
rozjasnic. I nadal nic nie wiem. Bo niby warto na koncu, ale nie mozna, gdy
stronka troche bardziej skomplikowana niz hello world.
rePeter (10.09.2018, 20:49)
Mon, 10 Sep 2018 20:35:56 +0200
Roman Tyczka <noemail> napisal(a):

> No, ze zadziala to wiem, tak zreszta teraz mam, tylko wlasnie spotykalem
> sie z twierdzeniem, ze skrypty to na koncu stad ten watek zaczalem, zeby to
> rozjasnic. I nadal nic nie wiem. Bo niby warto na koncu, ale nie mozna, gdy
> stronka troche bardziej skomplikowana niz hello world.


Nie mozesz w programie uzywac danych, których jeszcze nie wczytales (przegladarka nie
pobrala), co w tym dziwnego/skomplikowanego?
Borys Pogorelo (10.09.2018, 23:10)
Dnia Mon, 10 Sep 2018 13:24:26 +0200, Roman Tyczka napisal(a):

> To jest troche klopot. Bo jak rozwiazujecie taki uklad, ze strona sklada
> sie z kilku fragmentów, bedacych szablonami i w nich nastepuja odwolania do
> jQuery, które podpinaja zdarzenia pod np. buttony formularzy? One sa w
> srodku strony, wiec jak zaczynaja dzialac to jQuery jeszcze nie bedzie
> zaladowane, bo laduje sie na koncu i bach.. blad.


Klasyczny problem jajka i kury, praktycznie nierozwiazywalny w smietnikach
typu Wordpress. Teoretycznie móglbys spróbowac przechwycic wszystkie
wywolania jQuery, skolejkowac i uruchomic po zaladowaniu wlasciwej
biblioteki. Ale jesli masz do czynienia z cudzym kodem, to tam moze dziac
sie wszystko i takie rozwiazanie zaraz wybuchnie.

Skrypty zas wczytuje sie w stopce, bo ich przetwarzanie blokuje
renderowanie strony. A przy kilkusetkilobajtowych klockach kodu to staje
sie zauwazalne na telefonach.
Roman Tyczka (11.09.2018, 10:32)
On Mon, 10 Sep 2018 23:10:49 +0200, Borys Pogorelo wrote:

> Klasyczny problem jajka i kury, praktycznie nierozwiazywalny w smietnikach
> typu Wordpress. Teoretycznie móglbys spróbowac przechwycic wszystkie
> wywolania jQuery, skolejkowac i uruchomic po zaladowaniu wlasciwej
> biblioteki. Ale jesli masz do czynienia z cudzym kodem, to tam moze dziac
> sie wszystko i takie rozwiazanie zaraz wybuchnie.


Kod jest mój, znaczy nie jest to jakis CMS czy cos, tylko caly kod jest
wlasny. Moge z nim robic co chce... obym tylko umial ;-)
Na czym polega to przechwytywanie wywolan jQuery?
Bo sprawa jest teoretycznie prosta. W kazdym z tych malych szablonów
potrzebuje przypinac zdarzenia, uzywam do tego jQuery, ale szablon jest
wczytany, gdy jQuery jeszcze nie ma. Mozna by to przypiecie zdarzen wsadzic
w SetTimeout(), ale to drut, bo nigdy nie wiadomo czy czas jest odpowiedni.
Szkoda, ze nie ma czegos takiego jak SetTimeOut() ale z flaga afterLoadPage
czy cos w tym stylu.
Albo teraz wymyslilem, móglbym w naglówku miec zadeklarowana jakas tablice
funkcji i do niej pakowac wywolania z wnetrza strony, a stopka by tylko to
wyciagala z tablicy i odpalala, ale nie wiem jak to zrobic.

> Skrypty zas wczytuje sie w stopce, bo ich przetwarzanie blokuje
> renderowanie strony. A przy kilkusetkilobajtowych klockach kodu to staje
> sie zauwazalne na telefonach.


No i wlasnie dlatego warto te skrypty miec na koncu i o to walczyc.
Borys Pogorelo (13.09.2018, 23:28)
Dnia Tue, 11 Sep 2018 10:32:59 +0200, Roman Tyczka napisal(a):

> Kod jest mój, znaczy nie jest to jakis CMS czy cos, tylko caly kod jest
> wlasny. Moge z nim robic co chce... obym tylko umial ;-)
> Na czym polega to przechwytywanie wywolan jQuery?


Troche za bardzo uproscilem, bo to o czym mysle nie zadziala w Wordpressie.
Sa jakies wtyczki, które próbuja ogarnac ten smietnik, ale chyba przepisuja
HTML.

Jesli masz kontrole, to juz jest sporo. Bo zamiast uruchamiac kod JS mozesz
owinac go w funkcje, wrzucic do jakiejs kolejki (nawet prostej tablicy), a
pózniej uruchomic po kolei w odpowiednim kontekscie.

> Bo sprawa jest teoretycznie prosta. W kazdym z tych malych szablonów
> potrzebuje przypinac zdarzenia, uzywam do tego jQuery, ale szablon jest
> wczytany, gdy jQuery jeszcze nie ma. Mozna by to przypiecie zdarzen wsadzic
> w SetTimeout(), ale to drut, bo nigdy nie wiadomo czy czas jest odpowiedni.
> Szkoda, ze nie ma czegos takiego jak SetTimeOut() ale z flaga afterLoadPage
> czy cos w tym stylu.


A to akurat bardzo prosto rozwiazac tak jak opisalem. Wrzuc sobie gdzies
element docelowy, nazwe zdarzenia i funkcje do wywolania, a po
inicjalizacji jQuery na podstawie tego przypnij wszystkie eventy.

Albo zwyczajnie uzyj addEventListener(). jQuery byl do tego potrzebny, gdy
w eventach byl balagan, IE mial wlasne funkcje i inna strukture obiektu
zdarzenia. jQuery to normalizowalo.
Podobne wątki