Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Wysyłanie formularzy
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
ylk
Posiadam takie oto formularze ładowane dynamicznie po kliknięciu w button:
  1. <form id=settingsForm>
  2. <input type=hidden name=id value='{$this->params['id']}'>
  3. <input name=name type=hidden value='{$row['name']}'>
  4. <textarea name=value id=value rows=10 cols=100>{$row['value']}</textarea><br>
  5. Sortowanie:<br><input name=sort value='{$row['sort']}'><br><br>
  6. <button><img src='img/save16.png'> <b>Zapisz</b> [Enter]</button>
  7. </form>
  8.  
  9. <form id=maladiesFrom>
  10. <input type=hidden name=id value='{$this->params['id']}'>
  11. <input name=name id=name value='{$row['name']}' size=100><br>
  12. Nr statystyczny:<br><input name=nr value='{$row['nr']}'><br><br>
  13. <button><img src='img/save16.png'> <b>Zapisz</b> [Enter]</button>
  14. </form>

Oba oprogramowane są przy użyciu jQuery w sposób następujący:
  1. $('.displayForm').click(function(){
  2. var a=$(this).val();
  3. var a=a.split('-');
  4. $('#win').load("ajax.php?c=settings&m=getForm&setting_name="+a[0]+"&id="+a[1],function(){
  5. centerWin();
  6. $('#value').focus();
  7. $('#settingsForm').submit(function(event){
  8. event.preventDefault();
  9. $.post('ajax.php',$(this).serialize()+"&c=settings&m=add",function(){
  10. location.reload();
  11. });
  12. });
  13. });
  14. });
  15.  
  16. $('.displayMaladiesForm').click(function(){
  17. $('#win').load("ajax.php?c=settings&m=getMaladiesForm&id="+$(this).val(),function(){
  18. centerWin();
  19. $('#name').focus();
  20. $('#maladiesForm').submit(function(event){
  21. event.preventDefault();
  22. $.post('ajax.php',$(this).serialize()+"&c=settings&m=addMalady",function(){
  23. location.reload();
  24. });
  25. });
  26. });
  27. });

Czyli niemal identycznie. Pierwszy formularz wysyła się AJAXem tak jak tego oczekuję, natomiast drugi uparcie próbuje wysyłać GETem kompletnie ignorując $('#maladiesForm').submit(). Zmarnowałem już na to strasznie dużo czasu i nie widzę błędu sciana.gif
jaslanin
Nie powinno się zagnieżdżać funkcji obsługi zdarzeń w ten sposób. To że pierwszy formularz działa jest dziełem przypadku. Przykład:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
  6. <title>Untitled Document</title>
  7. </head>
  8.  
  9. <body>
  10. <script type="text/javascript">
  11. $(document).ready(function() { // wait for dom load
  12.  
  13. // good way
  14. $('#form1').submit(function() { // catch submit event
  15.  
  16. alert('i work');
  17.  
  18. return false; // block form submit, event.preventDefault(); also work but i prefer this.
  19. });
  20.  
  21. // bad way
  22. $('.doNotDoThis').click(function() { // catch submit event
  23.  
  24. $(this).val();
  25.  
  26. $('#form2').submit(function(event) { // catch submit event
  27.  
  28. event.preventDefault();
  29.  
  30. alert('i dont work');
  31.  
  32. });
  33.  
  34. return false; // block form submit
  35. });
  36.  
  37. });
  38. </script>
  39.  
  40.  
  41. <form action="" name="form1" id="form1">
  42. <input type="text" value="form1" />
  43. <button>Wyślij</button> <!-- html tag buttton also trigger submit event in form, see: [url="http://www.w3schools.com/tags/tag_button.asp"]http://www.w3schools.com/tags/tag_button.asp[/url] -->
  44. </form>
  45.  
  46. <form action="" name="form2" id="form2">
  47. <input id="testInput" type="text" value="form2" />
  48. <button class="doNotDoThis">Wyślij</button> <!-- html tag buttton also trigger submit event in form, see: [url="http://www.w3schools.com/tags/tag_button.asp"]http://www.w3schools.com/tags/tag_button.asp[/url] -->
  49. </form>
  50.  
  51. </body>
  52. </html>


PS. Twój opis problemu nie zasługuje by na niego odpowiadać, podajesz bowiem wyrywki kodu, w dodatku niepełne. Np. w kodzie nigdzie nie ma elementów displayForm, displayMaladiesForm, a odwołujesz się do nich przez jquery.

Polecam przeczytanie co robi w Twoim zastosowaniu funkcja submit: http://api.jquery.com/submit/
ylk
Napisałem przecież, że formularz jest ładowany dynamicznie po kliknięciu w button, więc idzie sie domyślić co to displayForm i displayMaladiesForm. W związku z tym, że formularze są ładowane AJAXem, nie da się uniknąć zagnieżdżeń.

BTW: nie działało bo zrobiłem literówkę, której nie mogłem się przez 2h dopatrzeć smile.gif

dzięki za odpowiedź!
pozdro!
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.