Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z jQuery Ajax
Forum PHP.pl > Forum > PHP
damianooo
Witam,

Mam taki oto przycisk:

  1. <div class="mydiv"><button type="button" id="<?php echo $id_inne_dla_kazdej_strony; ?>"/></div>


oraz plik test.js :

  1. $(document).ready(function() {
  2. $("#mydiv").click(function(){
  3. var test_id = $("#mydiv").find("button").attr("id");
  4. $.ajax({
  5. url: "/plik_do_ktorego_przesylam_dane_do_obrobienia.php",
  6. type: "POST",
  7. data: {
  8. id: test_id
  9. },
  10. dataType: "html",
  11. success: function(data){
  12.  
  13. }
  14. });
  15. });
  16. });


W aplikacji mam tak, że na kilku różnych stronach znajduje się ten sam div o id ="myDiv" , ale skrypt działa mi tylko na jednym z nich (na tym na którym jako pierwszym kliknę) . Chyba, że wcześniej odświeżę stronę to mogę również na innym kliknąć.Pytanie dlaczego tak się dzieje ?. Co robię źle ? Chcę żeby klikać dało się w dowolny div o id ="myDiv". Dodam jeszcze, że przełączanie między stronami odbywa się bez ich przeładowania.

Będę wdzięczny za podpowiedź, pozdrawiam
CuteOne
$("#mydiv").

podmień na

$(".mydiv").

ponieważ mydiv to nie id a class
damianooo
to nie jest powód ... zapomniałem zmienić tutaj w poście z # na . ... w skrypcie mam ok ... zobacz jeszcze na mój wcześniejszy post , tam przed chwilą dopisałem na końcu jedną uwagę. Ale może powtórzę ... przełączanie między stronami opdbywa się też bez przeładowania strony , ajaxem za pomocą metody GET. Ja natomiast kliknięcie w button przesyłam POSTem . Problem jest taki że jeśli nie odświeżę strony to nie mogę kliknąć w inny div o id="myDiv".
viking
Identyfikator ma za zadanie jednoznacznie wskazywać element. Nie może być kilku elementów o tym samym id. Popraw to na początek i sprawdź czy zadziała.
damianooo
zmieniłem diva na class="myDiv"

a w kodzie:

  1. $(document).ready(function() {
  2. $(".mydiv").click(function(){
  3. var test_id = $(".mydiv").find("button").attr("id");
  4. $.ajax({
  5. url: "/plik_do_ktorego_przesylam_dane_do_obrobienia.php",
  6. type: "POST",
  7. data: {
  8. id: test_id
  9. },
  10. dataType: "html",
  11. success: function(data){
  12.  
  13. }
  14. });
  15. });
  16. });


class może być takie samo dla wielu elementów ale nadal nie działa, sprawdzałem to już wcześniej właśnie.



viking
Czyli generalnie elementy które mają stać się klikalne pojawiają się później na skutek dołożenia ich do struktury DOM?
Jeśli tak to poczytaj link ze stopki mojej o delegacji zdarzeń.
nospor
Cytat
Dodam jeszcze, że przełączanie między stronami odbywa się bez ich przeładowania.
No jesli divy ładujesz ajaxem, a przypisanie do diva robisz tylko raz, to nic dziwnego ze nie działa, bo w momencie przypisywania zdarzenia, nie ma jeszcze divów, które doładujesz później ajaxem....

albo po kazdym ajax przypisuj zdarzenie do divów
albo poczytaj o LIVE
damianooo
Zrobiłem tak:

dla:

  1. <div class="myDiv"><button type="button" id="<?php echo $id_inne_dla_kazdej_strony; ?>"/></div>


skrypt:

  1. $(document).delegate("div.myDiv","click", function() {
  2. var test_id = $("div.myDiv").find("button").attr("id");
  3. $.ajax({
  4. url: "/plik_do_ktorego_przesylam_dane_do_obrobienia.php",
  5. type: "POST",
  6. data: {
  7. id: test_id
  8. },
  9. dataType: "html",
  10. success: function(){
  11. }
  12. });
  13. });


Działa ładnie , bardzo ładnie , jednak jeszcze przesyła mi ciągle to samo ID chociaż na każdej stronie mam ID inne ... dlaczego ? ... hmm
nospor
var test_id = $("div.myDiv").find("button").attr("id");
Masz sprawdzać id akutalnie klikniętego elementu a nie nie wiadomo jakiego....

var test_id = $(this).find("button").attr("id");
damianooo
zgadza się ... wielkie dzięki ... pewnie bym z czasem to sam zauważył ale dzięki Twojej pomocy nie traciłem więcej czasu ... jeszcze raz dzięki .. pozdrawiam
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.