Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Problem z click().
Forum PHP.pl > Forum > Po stronie przeglądarki
Sajrox
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ą ?
lord_t
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.
ucho
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...
Sajrox
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>
lord_t
Żeby elementy załadowane przez ajaxa miały nadane zdarzenia w ready musisz wykorzystać metodę live().
Sajrox
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
lord_t
  1. var $linki = $('a.link');
  2. $linki.each(function(){....})


Poczytaj o each().
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.