Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][jquery]Pobranie wartości z formularza
Forum PHP.pl > Forum > Przedszkole
Mlodycompany
Witam. Otóż mam pewną stronę gdzie otwiera się okienko, tak zwany "modalbox". W tym okienku mam formularz który jest ładowany podczas otwierania modalboxa a nie podczas ładowania strony. Problem polega na tym, że próbuje pobrać wartości z tego formularza ale coś nie daje rady, znaczy daje rade pobrać ale z innego(ze strony glównej).
Skrypt który pobiera te dane
  1. var form = $("form").serialize();
  2. $.post("cms/class/load.php", { func:"editArt", form:form }, function(data){
  3. $('#modal').html(data);
  4. });

Proszę o pomoc
pedro84
Zobacz najpierw tutaj: http://api.jquery.com/jQuery.post/
Mlodycompany
Wydaje mi się kolego, że nie w $.post tkwi problem. Zamiast tego mogę dać alert(form) i wyświetli mi dane z formularza ze strony głównej a nie z modalboxa. Problem tkwi w pobieraniu danych. Wydaje mi się, że ten drugi formularz nie jest poprostu widziany przez skrypt ale mogę się mylić.
everth
Nadaj swojemu formularzowi jakieś unikatowe id np.
  1. <form id='form_w_okienku' method='post' action='twojphp.php'>
  2. /* kod formularza */
  3. </form>

I zmodyfikuj skrypt:
[JAVASCRIPT] pobierz, plaintext
  1. var form = $("#form_w_okienku").serialize();
[JAVASCRIPT] pobierz, plaintext

Mlodycompany
no przykro mi ale nie działa.
everth
Daj więcej danych (formularz+skrypt) bo tak to można w ciemno zgadywać (jak jest duży to wklej.org)
Mlodycompany
To jest formularz w tym całym magicznym modalboxie
  1. <div id="n_'.$mfa[0][0].'"><form id="form"><table border="1" width="100%"><tr><th>Temat</th><td><input type="text" id="temat_'.$mfa[0][0].'" value="'.$mfa[0]['temat'].'"></td></tr><tr><th>Treść</th><td><ul style="display: inline;"><li style="display: inline;"><a href="java script:wstawKod(\'tresc_'.$mfa[0][0].'\', \'\')">B </a></li><li style="display: inline;"><a href="java script:wstawKod(\'tresc_'.$mfa[0][0].'\', \'\')">U </a></li><li style="display: inline;"><a href="java script:wstawKod(\'tresc_'.$mfa[0][0].'\', \'\')">I </a></li><li style="display: inline;"><a href="java script:wstawKod(\'tresc_'.$mfa[0][0].'\', \'[img][/img]\');">IMG </a></li><li style="display: inline;"><a href="java script:wstawKod(\'tresc_'.$mfa[0][0].'\', \'\')">URL </a> </li><li style="display: inline;"><a href="java script:wstawKod(\'tresc_'.$mfa[0][0].'\', \'[youtube][/youtube]\')">YouTube </a> </li></ul></br><textarea cols="60" rows="7" id="tresc_'.$mfa[0][0].'">'.$mfa[0]['tresc'].'</textarea></td></tr><tr><th>Miniaturka</th><td><img src="'.config::URL.'thumbes/'.$mfa[0]['miniaturka'].'" width="50"></td></tr><tr><th>Kategoria</th><td><select id="kategoria_'.$mfa[0][0].'">'.$kategorie.'</select></td></tr><tr><th>Dostęp</th><td><select id="dostep_'.$mfa[0][0].'">'.$poziomStr.'</select></td></tr><tr><th>Kolejność</th><td><input type="text" id="kolejnosc_'.$mfa[0][0].'" value="'.$mfa[0]['kolejnosc'].'"></td></tr><tr><td colspan="2"><div id="buttons"><ul><li><input type="button" id="cancelbut" name="action" value="Anuluj" onclick="editArt(\''.$ex2[0].'\', \'0\''.$next.')"></li><li><input type="button" id="acceptbut" name="action" value="Zapisz" onclick="editArt(\''.$ex2[0].'\', \'1\''.$next.');"></li></ul></div></td></tr></table></form></div>

  1. function editArt(id, s, next){
  2. if(s == 0){
  3. var str = '<div id="actiontrue">Anulowano edytowanie #'+id+'</div>';
  4. $('#modal').html(str);
  5. }
  6. if(s == 1){
  7. var form = $("#form").serialize();
  8. alert(form);
  9. $.post("cms/class/load.php", { func:"editArt", id:id, form:form }, function(data){
  10. $('#modal').html(data);
  11. });
  12. }
  13. if(next != undefined){
  14. $.post("cms/class/load.php", { func:"editArts", results:next }, function(data){
  15. str = str + data;
  16. $('#modal').html('<img src="cms/images/loading.gif" width="30" align="center">');
  17. $('#modal').html(str);
  18. });
  19. }
  20. else{
  21. str += '<div id="close"><a href="java script:display(\'modal\', 0)"><img src="cms/images/del.png" width="25"></a></div>';
  22. $('#modal').html(str);
  23. }
  24. }

No i wzasadzie tyle powinno starczyć. Powiem jeszcze, że w głównym oknie znajduje się tabela ze wszystkimi newsami i są checkboxy i w/w skrypt zczytuje które checkboxy są zaznaczone
everth
Prawdopodobna odpowiedź - twoje input i textarea nie mają znacznika name (czyli nie zostaną zserializowane). Ponadto zaoferuję ci kilka rad:
  • nie wywołuj zdarzeń JS w kodzie html (możesz bindować zdarzenia w pliku JS) - łatwiejsze do utrzymania
  • inputy nie muszą koniecznie posiadać id (chyba że są konkretne do ostylowania) - name i class wystarcza
  • jeśli oczekujesz odpowiedzi na przyszłość to formatuj kod - nie każdy ma czas przerzucać go do IDE

Mlodycompany
Dziękować. Pomogło. Teraz jeszcze mam pytanie. Zamienia mi np. [u] na %5B. Jak to zmienić?
everth
Spotkałem się kiedyś z tym problemem, niestety już nie pamiętam jak sobie poradziłem. Może zamiast serializować cały form serializowałem poszczególne inputy i dopiero później składałem w zapytaniu np.
[JAVASCRIPT] pobierz, plaintext
  1. {'wybraneInputy':$("#myForm input.wybrane").serialize()}
[JAVASCRIPT] pobierz, plaintext
. Poza tym jeśli inputy mają ten sam 'name' to nie trzeba przy nim dodawać do nazwy [], PHP sam skonstruuje z nich tablicę. Może to ci w czymś pomoże
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.