Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jq] masowe podpinanie onclick do linkow
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
DBR
witam.

mam strone na ktorej sporo sie dzieje, wiele linkow i elementow wykonuje ajaxowe i nieajaxowe js funkcje. chcialem napisac uniwersalny podpinacz zdarzenia onclick i wymyslilem cos takiego.

  1. <a href="#" class="myEvent" id="funkcjaA">link A</a>
  2. <a href="#" class="myEvent" id="funkcjaB">link B</a>
  3.  
  4. $(document).ready(function(){
  5.  
  6. $("a.myEvent").click(function(){
  7. var function_name = $(this).attr("id");
  8. var function_parametr = $(this).attr("title");
  9.  
  10. window[function_name](function_parametr);
  11.  
  12. return false;
  13. });
  14.  
  15. });
  16.  
  17. function funkcjaA()
  18. {
  19. //foo
  20. }
  21.  
  22. function funkcjaB()
  23. {
  24. //bar
  25. }


robie takie linki, daje im jakby globalna klase, w id przemycam nazwe funkcji, dodatkowo w title czasem jak trzeba przemycam parametr (np id wiersza do usuniecia itd) i w ten sposob tworze masowe linki bez koniecznosci dawania click na kazdy z nich.

niby fajnie dziala ale to moj pomysl. czy to dobry myk? czy tak sie to robi w jakichs bardziej pro rzeczach? moze sa na to inne sposoby?

bede wdzieczny za uwagi bardziej pro js graczy ;]
markonix
Niepotrzebnie pakujesz to w class, id, title. To są atrybuty, które mają jakiś określony cel.
Po prostu stwórz własne atrybuty typu "action". Dla jQuery nie ma znaczenia czy istnieje dany atrybut w specyfikacji HTML.

Co do rozwiązania jeżeli się sprawdza, jest elastyczne i uważasz, że oszczędzasz swój czas to jest ok.
DBR
dzieki wielkie, o tym nie pomyslalem. moge przemycic wszystko w swoich atrybutach i pobierac to w jq.

ktos ma inne przemyslenia na temat tego pomyslu?
kamil4u
Jak dla mnie takie rozwiązania są trochę na siłę...

Stwórz tablicę, w której będziesz trzymał elementy, zdarzenie i funkcje, a następnie funkcję, która doda zdarzenia w zależności od tej tablicy.

Własne atrybuty trochę niszczą zgodność ze standardami W3C Jeżeli piszesz dla siebie to ok, ale jak ktoś będzie chciał się tego trzymać to będziesz miał sporo poprawek.

Przy większych projektach stara się rozdzielić warstwę HTML, CSS i JS, tak żeby kod związany z obsługą zdarzeń zmieniał tylko w plikach *.js

Oczywiście jak robisz to dla siebie nic nie stoi na przeszkodzie - to bardziej kwestia wygody. Jeżeli to ogarniesz to jest ok. Gorzej, gdy robisz coś w zespole i ktoś w ogóle nie rozumie Twojego kodu tongue.gif

Pozdrawiam i przemyśl to sobie.
DBR
kamil4u, mozesz napisac przykladowy kawalek takiego kodu ktory bedzie to robil na tablicy?

poza tym czy z tego nie zrobi sie troche inny rodzaj balaganu. bo teraz mam nazwe funkcji zaraz przy linku i jest to w miare wygodne... a tak bede ja mial gdzies tam w zewnetrznej tablicy. poza tym jakos musze rozpoznawac chyba te elementy wiec czy to nie wyjdzie na to samo? hmm.
kamil4u
Jak pisałem to bardziej kwestia wygody + ew. pracy w zespole.
Można to zrobić np. tak:
Kod
var events = [
  {
    'element': 'moje_id',
    'event': 'click',
    'function': test1
  },
  {
    'element': 'moje_id2',
    'event': 'keypress',
    'function': test2
  }
];

funkcja_przerbiająca_tablice_na_zdarzenia( events );


To tylko luźna propozycja. Można ją zmieniać wedle gustu i wygody. Dzięki temu masz wszystko w jednym miejscu i łatwo cokolwiek edytować. Jeżeli używasz np. jquery to wtedy taka propozycja może wydawać się nie potrzebna. Osobiście dodaję zdarzenia w różny sposób w zależności od projektu. Ten powyższy zastosowałem dopiero raz i na dodatek nie dokończyłem projektu.

Każdy sposób ma jakieś wady. Wady Twojego pomysłu podałem, jeżeli Ci nie przeszkadzają to jest jak najbardziej ok. Wady mojego: duża liczba podstron = częściowy śmietnik. Wtedy skorzystałem z niego w aplikacji.

Pozdrawiam

PS. Napisałem swój post, żebyś przemyślał decyzję - nie koniecznie chcę Cię od niego odwieść. Warto myśleć przyszłościowo przy pisaniu funkcji - ja się już o tym boleśnie przekonałem smile.gif
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.