Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [jQuery] Problem z click()., Gdy kliknę w link zdarzenie jest wywoływane o 1 razy więcej.
Sajrox
post 27.02.2009, 13:13:30
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


Witam.
Posiadam taki przykładowy skrypt:

  1. <script type="text/javascript">
  2. // <![CDATA[
  3. function linkClick()
  4. {
  5. $("a.link").click(function()
  6. {
  7. alert('test click');
  8. });
  9. }
  10. // ]]>
  11. </script>
  12.  
  13. <a href="javascript:linkClick();" class="link">KLIKNIJ MNIE</a>


I tutaj jest problem gdyż po każdorazowym kliknięciu w link otrzymuje p jeden komunikatów więcej niż w poprzednim kliknięciu.
np.
Kliknięcia ...... Ilosc komunikatów alert()
1................... 0
2................... 1
3................... 2
4................... 3
5................... 4

A powinno być tak:
Kliknięcia ....... Ilosc komunikatów alert()
1................... 0
2................... 1
3................... 2
4................... 3
5................... 4
itd..


Czy ktoś wie co może być tego przyczyną ?

Ten post edytował Sajrox 27.02.2009, 13:16:03
Go to the top of the page
+Quote Post
lord_t
post 27.02.2009, 13:19:45
Post #2





Grupa: Zarejestrowani
Postów: 603
Pomógł: 131
Dołączył: 24.07.2007
Skąd: Górny Śląsk

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


Chyba coś Ci się pomieszało;) w tym przykładzie jak powinno być.

Za każdym kliknięciem masz jeden click więcej, bo dodajesz do zdarzenia onclick następnego alerta.

Jeśli chcesz mieć jednego alerta to wywołaj swoją funkcję w zdarzeniu ready(vide dokum. jQuery).

PS.Sugeruje nie dawać funkcji/wyrażeń js w href.

Ten post edytował lord_t 27.02.2009, 13:20:57


--------------------
Go to the top of the page
+Quote Post
ucho
post 27.02.2009, 13:22:23
Post #3





Grupa: Zarejestrowani
Postów: 300
Pomógł: 32
Dołączył: 31.07.2006

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


Kod
<script>
function linkClick() {
alert('test click');
}
</script>
<a href="#" onclick="linkClick()" class="link">KLIKNIJ MNIE</a>

albo
Kod
<a href="#"  class="link">KLIKNIJ MNIE</a>
<script>
$("a.link").click(function()
{
alert('test click');
});
</script>

Nie mieszaj dwóch stylów, a przynajmniej nie modyfikuj onclick podczas wywołania onclick smile.gif A samą ilość alertó po prostu zliczaj w jakiejś zmiennej i wykonuj alert w pętli for - tak chyba prościej...

Ten post edytował ucho 27.02.2009, 13:23:51
Go to the top of the page
+Quote Post
Sajrox
post 27.02.2009, 13:35:32
Post #4





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


Właśnie w tym problem że linki <a> generuje przez AJAXa i gdy wstawię w zdarzeniu ready()
kod który ma reagować na kliknięcie linka który został pobrany przez AJAXA to jest tak jakby tego linka w ogole nie było.

Nie wiem czy dobrze wyjaśniłem.
Ale napisze tak że gdy w dokumencie ręcznie podam linki któe mają wywołuwać dane zdarzenie, to wtedy nie ma problemy. Jednak gdy wygeberuje je przez AJAXA to nie są one widoczne przez $(document).ready( ...

Przedstawie w skrócie cały skrypt:

  1. <script type="text/javascript">
  2. // <![CDATA[
  3.  
  4. $(document).ready(function()
  5. {
  6. $('a.link').click(function() {
  7. alert('test click()');
  8. });
  9. });
  10.  
  11. function getData()
  12. {
  13. $().load(ajaxLoad());
  14.  
  15. $.ajax(
  16. {
  17. type: "POST",
  18. url: "./getData.php",
  19. dataType: "json",
  20. success: function(json) {
  21. // Pobranie danych i wyswietlenie ich na stronie w formie tablicy, tutaj w;asnie znajdują się moje linki
  22. }
  23. });
  24. }
  25.  
  26. // ]]>
  27. </script>
  28.  
  29. <div id="dane_z_ajaxa"></div>
Go to the top of the page
+Quote Post
lord_t
post 27.02.2009, 13:42:50
Post #5





Grupa: Zarejestrowani
Postów: 603
Pomógł: 131
Dołączył: 24.07.2007
Skąd: Górny Śląsk

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


Żeby elementy załadowane przez ajaxa miały nadane zdarzenia w ready musisz wykorzystać metodę live().


--------------------
Go to the top of the page
+Quote Post
Sajrox
post 27.02.2009, 13:46:04
Post #6





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


Dzięki wielkie smile.gif
Działa elegancko.

PS:
Jeszcze tylko jedna sprawa. Mam kilka elementów <a> każdy ma klase "link" i atrybut "value" z różnymi wartościami. Pytanie jak mogę pobrać wszystkie wartosci z value <a> ?

  1. var $linki = $('a.link');
  2. for (var i=0;i<$linki.length; i++)
  3. alert($linki[i].attr('value'));


Nie działa sad.gif

Ten post edytował Sajrox 27.02.2009, 13:57:38
Go to the top of the page
+Quote Post
lord_t
post 27.02.2009, 14:59:35
Post #7





Grupa: Zarejestrowani
Postów: 603
Pomógł: 131
Dołączył: 24.07.2007
Skąd: Górny Śląsk

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


  1. var $linki = $('a.link');
  2. $linki.each(function(){....})


Poczytaj o each().


--------------------
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: 19.07.2025 - 02:37