Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] serialize danych modyfikowanych przez jQuery
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
szczurek
Witam,
mam formularz który jest ładowany na stronę częściowo. A dokładniej to pojawia się na niej po kawałku.

Użytkownik wypełnia 3 pola kilka zapisz. Wtedy uruchamiana jest funkcja która serializuje dane SendData = $('form').serialize(); i za pomocą $.post(); wysyła je na serwer.

Tam są przetwarzane. Do bazy danych zapisywany jest rekord i zwracany jego identyfikator.

Wtedy za pomocą $.('element').val(); ustawiana jest wartość pola.

Skrypt pokazuje użytkownikowi kolejne pola do wypełnienia a wypełnione już blokuje.

Po uzupełnieniu kolejnych pól formularza uruchamiana jest funkcja jQuery, która ponownie ma wykonać

$('form').serialize i wysłać je na serwer. Problem polega na tym, że wtedy już zostają wysłane tylko dane wypełnione ręcznie przez użytkownika. Nie wysyła w ogóle ani danych wpisanych poprzednio z pól wyłączonych. Ani danych z pól ukrytych, których wartości modyfikowane zostały za pomocą $.('element').val();

A patrząc w firebugu te wartości są zmodyfikowane w przeglądarce. Jednak w tablicy $_POST po stronie serwera widać już tylko te wpisane ręcznie przez użytkownika.

Nie wiem czy to bug jQuery czy ja się zabieram za to od złej strony.
Ma ktoś pomysł jak to rozwiązać?
devnul
zdaje się że pola wyłączone nie są serializowane przez jquery (wysyłane przez post chyba też nie są) co do ukrytych to szczerze mówiac dziwne - jesteś pewny że masz je w obrębie formularza?
szczurek
Tak jestem pewien, że ukryte jest w obrębie formularza. Właściwie nie wysyłanie wyłączonych pól nie będzie tu stanowić problemu jeśli pójdą ukryte.

Z tym ukrytym upatrywałbym problemu z serializacją w tym, że jego wartość przy załadowaniu strony jest pusta a wypełniam ją za pomocą jQuery po wykonaniu pierwszego zapytania.

Poniżej kod formularza skopiowany z firebuga już po odpaleniu tej pierwszej akcji czyli wypełnieniu idAnkiety

  1. <form accept-charset="utf-8" method="post" action="akcja">
  2. <div id="ankieta">
  3. <p>
  4. <input type="hidden" value="41" name="idAnkiety" id="idAnkiety"><label for="AnkietaNazwa">Nazwa ankiety </label><input type="text" value="" name="AnkietaNazwa" id="AnkietaNazwa" disabled=""> </p>
  5. <p>
  6. <label for="AnkietaStart">Data rozpoczęcia ankiety </label><input type="text" class="hasDatepick" value="" name="AnkietaStart" id="AnkietaStart" disabled=""> </p>
  7. <p>
  8. <label for="AnkietaKoniec">Data zakończenia ankiety </label><input type="text" value="" name="AnkietaKoniec" id="AnkietaKoniec" disabled=""> </p>
  9. <p><a onclick="savepoll();" href="#">Zapisz</a></p>
  10. <div class="czesc-ankiety" style="display: block;">
  11. <h2>Część ankiety</h2>
  12. <p><input type="hidden" value="" name="idCzesci" id="idCzesci"><label for="CzesciNazwa">Nazwa części ankiety </label><input type="text" onblur="savePart();" value="" name="CzescNazwa" id="CzescNazwa"></p>
  13.  
  14. <div class="pytanie">
  15. <p><label for="Pytanie">Wybierz pytanie </label><select name="PytanieSelect[]"></select> lub</p>
  16. <p><input type="hidden" value="" name="idPytania"><label for="Pytanie">Dodaj nowe pytanie: </label><input type="text" name="Pytanie[]"></p>
  17. </div>
  18.  
  19. </div>
  20. <p><input type="submit" value="Zakończ ankietę" name="zamknijankiete"></p>
  21. </div>
  22. </form>
devnul
jeśli chodzi o ukryte pola to wszystko wygląda ok, pokaż JS bo pewnie tam jest problem
szczurek
JavaScript
  1. function savepoll()
  2. {
  3. var SendData = $('form').serialize();
  4. $.post('/index.php/ankieta/savepoll',SendData, function(data){showpart(data);},'json');
  5.  
  6. }
  7.  
  8. function showpart(data)
  9. {
  10. $('#idAnkiety').val(data.id);
  11. $('#AnkietaNazwa').attr('disabled',true);
  12. $('#AnkietaStart').attr('disabled',true);
  13. $('#AnkietaKoniec').attr('disabled',true);
  14. $('.czesc-ankiety').show();
  15. }
  16.  
  17. function savePart()
  18. {
  19. var SerializeData = $('form').serialize();
  20.  
  21. $.post('/index.php/ankieta/savepart', SerializeData, function(data){showquestion(data);},'json');
  22. }
  23.  
  24. function showquestion(data)
  25. {
  26. if(data.lenght>0)
  27. {$('#idCzesci').val(data.id);}
  28. $('#CzescNazwa').attr('disabled',true);
  29. $('.pytanie').show();
  30.  
  31.  


Naturalnie jest też zaimportowana biblioteka jQuery 1.4.2
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.