Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] dobre praktyki
Forum PHP.pl > Forum > Po stronie przeglądarki
adamantd
Jeden z moich plików jquery ma już ponad 3000 linijek a zapowiada się na to, że będzie miał kilka razy tyle, umieszczam w nim skrypty obsługujące wszystko na stronie co ma być obsłużone w jquery. Pytanie brzmi czy pisać za każdym razem przed obsługą zdarzenia warunek np.

  1.  
  2. if($(#jakas_podstrona).is(':visible') { //#jakas_podstrona to cała jedna podstrona albo jakaś jej część bądź po prostu jakiś formularz
  3. //który jeśli będzie widoczny to zadziała cała obsługa zdarzeń dla elementów w nim zawartych a jeśli nie jest widoczny to nie ma
  4. //żadnej obsługi zdarzeń
  5.  
  6. //tutaj dopiero całość np.
  7. $('#link').click(function(){
  8. //coś tam coś tam
  9. });
  10.  
  11. }
  12.  


czyli jeśli jakiś tam content jest widoczny -jestem na pewnej podstronie, to dopiero wtedy działają wszystkie clicki i inne zdarzenia

czy może być po prostu obsługa zdarzeń dla każdego elementu w całym serwisie bez żadnych instrukcji warunkowych np.

  1.  
  2. $('#link').click(function(){
  3. //coś tam coś tam
  4. });
  5.  
  6.  
  7. $('#link_z_innej_podstrony').click(function(){ //która aktualnie nie jest widoczna
  8. //coś tam coś tam
  9. });
  10.  
  11.  
  12. $('#img_z_jeszcze_innej_podstrony').hover(function(){ //która aktualnie nie jest widoczna
  13. //coś tam coś tam
  14. }, function(){
  15. //coś tam
  16. });
  17.  
  18.  
  19.  



czy ma to jakieś znaczenie? W całym tym pliku mam kilkanaście takich warunków tylko dlatego, że tam akurat muszą one być ale większość jest zdefiniowanych bez instrukcji if

czy to błąd?

Pewnie znowu niezrozumiale napisałem? biggrin.gif
zegarek84
to co napisałeś - skoro dana warstwa nie wyświetla się na stronie więc nikt w nią nie kliknie - ten warunek jest zbyteczny ;]

ale z kolei jeśli tych listenerów masz masę to mógłbyś zainteresować się .delegate - działa podobnie do .live jednak nasłuchując na konkretnej warstwie, w ten sposób masz jednego listenera i w funkcji możesz sprawdzać kliknięty element...

ps. jeśli odwołujesz się często do danego elementu DOM to mógłbyś też zapamiętywać do niego uchwyt a nie szukać go po selektorach za każdym razem...
adamantd
No właśnie mniej więcej o to mi chodziło czy jest sens robić takie warunki skoro dane elementy i tak nie są widoczne.. A jeśli mam kilka razy odwołać się do tego samego elementu to zawsze robię uchwyt.
Dzięki
markonix
Ten warunek jest zbędny przy podpinaniu eventów - po prostu się nie wykonają.
Jednak przydaje się np. gdy wykonujemy jakąś funkcję na elemencie.
Przykładowo też mam tak jak ty globalny plik i w nim ajaxem co 10 sekund odświeżam pewien DIV w menu użytkownika.
Menu jest na prawie każdej podstronie, no ale prawie. Gdybym zostawił to bez warunku to:
1) niepotrzebnie by się wykonywał ajax
2) wywalił by błąd bo by nie znalazł div'a, który ma zaktualizować.
adamantd
Wiem co masz na myśli -w takich przypadkach mam warunki. Chyba, że coś gdzieś pominąłem, ale błędów nigdzie nie widać. Jedyne błędy związane chyba właśnie z brakiem warunków pojawiają się w przypadku zliczania tekstu od tyłu w textarea. W innym pliku w którym przetrzymuje same funkcje js z których korzystam w skrypcie jquery mam zliczanie od tyłu -w serwisie mam sporo textarea przy których wyświetlam zliczanie od tyłu i w firefoxie pokazuje mi błędy, że parametr tej właśnie funkcji jest undefined (zliczanie działa) ale nie chce mi się już tego przerabiać wszystkiego tym bardziej, że to nie przeszkadza.

A przy okazji skoro mowa o zliczaniu tekstu -musiałem przerobić całą funkcję zliczania od tyłu, żeby enter (\n) zliczało jako 2 znaki bo inaczej przekłamywało. Dla przykładu gdybym w polu textarea miał maxlength="10" to dało by się kliknąć tylko 5 razy enter a licznik pokazałby, że można jeszcze wpisać 5 znaków -dlaczego tak jest?
zegarek84
Cytat(adamantd @ 3.11.2012, 12:35:17 ) *
A przy okazji skoro mowa o zliczaniu tekstu -musiałem przerobić całą funkcję zliczania od tyłu, żeby enter (\n) zliczało jako 2 znaki bo inaczej przekłamywało. Dla przykładu gdybym w polu textarea miał maxlength="10" to dało by się kliknąć tylko 5 razy enter a licznik pokazałby, że można jeszcze wpisać 5 znaków -dlaczego tak jest?

na windowsie znak nowej lini to "\r\n", na unixach "\n", mac to chyba "\r"... czy w przeglądarkach tak samo jest nie sprawdzę, bo coś mi się mozilla na firebugu wysypuje po ostatniej aktualizacji na opensuse, a chrome nie chce mi się włączać ;p
weź sobie zapisz jakiś plik na linuxie tekstowy w notatniku z rozszerzeniem .txt, otwórz w notatniku windowsowym a będziesz tekst widział w jednej linii ^^

ps. jeśli masz uniwersalne kodowanie UTF-8 na stronie to niektóre znaki zajmują 2 miejsca ;]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.