Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX/Jquery] Kod zmieniony przez jquery nie działa
Forum PHP.pl > Forum > XML, AJAX
Saletra
Witam,

Chodzi o link Dodaj/Usun. Po kliknięciu Dodaj zamienia się w Usun. Po kliknieciu w Usun jest 404 zamiast zamieniac sie w Dodaj. Można to naprawić?
(można utworzyć nowy plik html i wstawić poniższy kod w lokalizacji z jquery.js i przetestować)

  1. <script type="text/javascript" src="jquery.js"></script>
  2. <script type="text/javascript">
  3. $(document).ready(function(){
  4. $(".add").click(function(){
  5.  
  6. $.get("jquery.php", { follow: "27" } );
  7. $('div#dane').html('<a href="nothing" class="delete">Usun</a>');
  8. return false;
  9. });
  10.  
  11. $(".delete").click(function(){
  12. $.get("jquery.php", { unfollow: "yes", pid: "25" } );
  13. $('div#dane').html('<a href="nothing" class="add">dodaj</a>');
  14. return false;
  15. });
  16. });
  17. </script>
  18. <div id="dane"><a href="nothing" class="add">dodaj</a></div>
  19. </body>
  20. </html>
osl
ekspertem jquery nie jestem, ale wydaje mi się, że selektor $('.delete') nic tu nie daje z prostego powodu - takiego elementu z taką klasą po prostu nie ma. po zamianie klasy musiałbyś pewnie jeszcze raz użyć selektora żeby dodać zdarzenie click, ewentualnie skorzystać z funkcji live
Fifi209
A konsolka jakieś błędy może wysypuje ?
Saletra
Ok, namęczyłem się. Fakt, trzeba doinstalować plugin Live i wtedy działa.
Wersja zabazgrana 0.1 podsyłam i wracam do pracy:
  1. $(".dane5").bind('click', function() {
  2. $(this).html('<a href="delete" class="delete">usun1</a>');
  3. this.blur();
  4. return false;
  5. });
  6. $(".dane5").livequery('click', function() {
  7. $(this).html('<a href="add2" class="add2">dodaj2</a>');
  8. $(this).removeClass('dane5');
  9. $(this).addClass('dane6');
  10. this.blur();
  11. return false;
  12. });
  13. $(".dane6").bind('click', function() {
  14. $(this).html('<a href="delete3" class="delete3">usun3</a>');
  15. this.blur();
  16. return false;
  17. });
  18. $(".dane6").livequery('click', function() {
  19. $(this).html('<a href="add" class="add2">dodaj4</a>');
  20. $(this).removeClass('dane6');
  21. $(this).addClass('dane5');
  22. this.blur();
  23. return false;
  24. });
singles
Nie działało Tobie na początku, ponieważ dopisywałeś event do elementu o klasie .delete w momencie załadowania strony, a wtedy go jeszcze nie było. Rozwiązania są dwa - skorzystanie z event delegation (czyli w praktyce Twoje live) albo dopisywać zdarzenie do elementu click po jego stworzeniu.

BTW. Nie musisz używać pluginu LiveQuery. jQuery od wersji bodajże 1.3.2 posiada metodę live(). Zawsze jeden plugin mniej.
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.