Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][HTML][PHP]Zapis poszczególnych rekordów
Forum PHP.pl > Forum > Przedszkole
krzesik
Witam, mam tabelkę:
  1. echo '<td>
  2. <form method="POST" id="form" name="kod" action="">
  3. <div class="loader"></div>
  4. <input type="hidden" name="id" value='.$r[id].'></input>
  5. <input type="text" name="kod" title="Kod" value='.$r[kod].' ></input>
  6. <button type="submit" id="submit" value=Zatwierdź><img src=img/ikony/Save.png title=Zapisz! style=width:15px;height:15px;border:0px; /></button>
  7. </form></td>';
  8.  

i do tego skrypt:
  1. <script type="text/javascript">
  2. $(document).ready(function() {
  3. $('#submit').click(function() {
  4.  
  5. $.ajax({
  6.  
  7. type: "POST",
  8.  
  9. url: "zapisz.php",
  10.  
  11. data: $("#form").serialize(),
  12.  
  13. beforeSend: function() {
  14.  
  15. $('.loader').html('<img src="ajax-loader.gif" />').show();
  16.  
  17. },
  18.  
  19. dataType: "html",
  20.  
  21. success: function(result) {
  22.  
  23. $("#error_message").html(result);
  24.  
  25. $('.loader').html('<img src="ajax-loader.gif" />').hide();
  26. },
  27. error: function(xhr, ajaxOptions, thrownError) {
  28.  
  29. alert(xhr.status);
  30.  
  31. alert(thrownError);
  32.  
  33. alert(ajaxOptions);
  34.  
  35. $('.loader').html('<img src="ajax-loader.gif" />').hide();
  36. }
  37. });
  38. return false;
  39. });
  40.  
  41. });
  42.  
  43. </script>
  44.  


w każdym rekordzie mam inputa do wpisania oraz przycisk zapisz, chcę zapisywać bez przeładowywania strony, zapisuje poprawnie, ale wyłącznie pierwszy rekord, co mam skopane? Dziękuję za odpowiedź
nospor
Zawsze serializujesz tylko pierwszego forma wiec tylko on sie zapisuje. Dosc logiczne
krzesik
W jaki sposób to naprawić?

data: $("#form'.$r[id].'").serialize(), ?
nospor
zakladam ze masz wiele formow.
Jesli tak to nie nadawaj im takiego samego ID. Poprostu po kliknieciu submit znajdz TD do jakiego nalezy to submit ($(this).parents("td:first")) a potem znajdz form lezacy w tym TD

$(this).parents("td:first").find("form").serialize();
krzesik
Dziękuję za starania, ale AJAX-a dopiero się uczę i nie wiem jak to zastosować co mi zapisałeś :-(
nospor
Podalem ci PELEN GOTOWY kod...

zamiast
data: $("#form").serialize(),

masz dac

data:$(this).parents("td:first").find("form").serialize(),
krzesik
tak też się domyśliłem, ale po zmianie dalej mi zapisywało wyłącznie pierwszy rekord, więc myślałem że coś znów skopałem. co może być jeszcze nie tak?
nospor
Dla button submit nadaj klase np. class="submit" a potem
nie: $('#submit')
a: $('.submit')
krzesik
Dziękuję, pomogło! I jeszcze jedno pytanie, jak spowodować że po zapisie "wypozycjonuje" mi się rekord na górze strony?
nospor
Tak wiec zapamietaj jedna podstawowa rzecz a w zasadzie dwie:
1) Problem co tu miales nie ma zadnego zwiazku z AJAX
2) $("#cos") szuka elementu o ID cos i zwraca tylko pierwszy napotkany element. ID to ID i ma byc unikalne a nie 1000 elementow ma to samo ID. Jak masz wiec wiele elementow robiacych to samo to nadawaj im klasy i operuj na klasach
krzesik
więc jeśli miałem ID (unikalny) dla każdego rekordu tabeli
  1. <input type="hidden" name="id" value='.$r[id].'></input>


to mógłbym to zrobić tak:?
  1. .....................
  2. <form method="POST" id="form'.$r[id].'" name="kod" action="">
  3. .....................
  4.  
  5. data: $("#form'.$r[id].'").serialize(),
nospor
Nie, poniewaz funkcja zapisu jest jedna a nie dla kazdego rekordu oddzielnie
krzesik
Rozumiem teraz, napiszę raz jeszcze:
I jeszcze jedno pytanie, jak spowodować że po zapisie "wypozycjonuje" mi się rekord na górze strony?
nospor
A teraz to pomyliles fora. Wrozki pietro wyzej tongue.gif

A skad ja mam wiedziec co ty masz na gorze strony i co i gdzie ma ci sie "wypozycjonowac".
viking
Zrobisz to np. http://api.jquery.com/insertbefore/
Natomiast success, error są od jquery 3 przestarzałe. Zamień na done i fail jeśli nie chcesz mieć problemów.
krzesik
chodziło mi o to, że jeśli zapisuję np 65 rekord czyli gdzieś po środku tabeli, po zapisie ten rekord "ustawi się " przy górnej krewędzi okna
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.